Rollup-plugin-typescript2: Tidak berfungsi dengan plugin yang berisi sintaks async/menunggu

Dibuat pada 14 Agu 2018  ·  15Komentar  ·  Sumber: ezolenko/rollup-plugin-typescript2

Apa yang terjadi dan mengapa itu salah

Plugin ini tidak bekerja dengan plugin yang mengandung sintaks async/await yang disebabkan oleh masalah hash objek dan tscache.ts . Saya pikir ini sulit untuk memperbaiki objek-hash karena tidak ada cara untuk mendeteksi fungsi async sekarang. Jadi apakah ada alternatif tanpa objek-hash?

Lingkungan

Versi

  • naskah: 2.8.3
  • rollup: 2.1.1
  • rollup-plugin-typescript2: 0.14.0

rollup.config.js

import svgr from '@svgr/rollup';
import typescript from 'rollup-plugin-typescript2';

export default {
  ...
  plugins: [
    replace({ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV) }),
    svgr(),
    typescript({
      useTsconfigDeclarationDir: true,
    })
  ],
  ...
};

tsconfig.json

Tidak relevan.

package.json

Tidak relevan.

keluaran plugin dengan verbositas 3

[!] (rpt2 plugin) Error: Unknown object type "asyncfunction"
src/components/atoms/Icon/index.ts
Error: Unknown object type "asyncfunction"
    at Object._object (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:218:17)
    at Object._function (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:319:14)
    at Object.dispatch (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:185:30)
    at /Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:246:18
    at Array.forEach (<anonymous>)
    at Object._object (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:242:21)
    at Object.dispatch (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:185:30)
    at /Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:260:23
    at Array.forEach (<anonymous>)
    at Object._array (/Users/vwxyutarooo/Projects/kouzoh/mercari-web-jp-component/node_modules/rollup-plugin-typescript2/node_modules/object-hash/index.js:259:20)

Komentar yang paling membantu

Saya harus mengakui bahwa saya terkejut sejauh ini tidak ada masalah lagi karena fungsi async sangat umum sekarang . Itu juga mengapa saya berpikir bahwa mengabaikannya akan menyebabkan banyak masalah cache. PR yang saya kirimkan ke objek-hash beberapa waktu lalu adalah konsekuensi dari masalah ini, dan saya menyarankan Anda menghapus ketergantungan pada objek-hash. Saya cukup yakin bahwa PR yang dikirimkan beberapa waktu lalu akan berfungsi dengan baik karena cocok dengan nilai yang sama seperti yang diberikan dalam pesan kesalahan dan lulus kedua unit test dan memecahkan masalah di plugin ini, jadi jangan ragu untuk bergantung pada PR daripada paket NPM di sini.

@vwxyutarooo , solusi langsung adalah mengatur clean: true dalam konfigurasi untuk mem-bypass cache sepenuhnya. Atau (maaf untuk stekernya) saya membuat https://github.com/wessberg/rollup-plugin-ts yang juga akan berfungsi dengan baik

Semua 15 komentar

Saya menambahkan solusi untuk mengabaikan apa pun yang tidak dapat diproses objek-hash (lihat cabang objecthash, opsi objectHashIgnoreUnknownHack ). Ini berpotensi membuat cache basi, jadi bukan solusi jangka panjang yang baik.

@wessberg

Saya harus mengakui bahwa saya terkejut sejauh ini tidak ada masalah lagi karena fungsi async sangat umum sekarang . Itu juga mengapa saya berpikir bahwa mengabaikannya akan menyebabkan banyak masalah cache. PR yang saya kirimkan ke objek-hash beberapa waktu lalu adalah konsekuensi dari masalah ini, dan saya menyarankan Anda menghapus ketergantungan pada objek-hash. Saya cukup yakin bahwa PR yang dikirimkan beberapa waktu lalu akan berfungsi dengan baik karena cocok dengan nilai yang sama seperti yang diberikan dalam pesan kesalahan dan lulus kedua unit test dan memecahkan masalah di plugin ini, jadi jangan ragu untuk bergantung pada PR daripada paket NPM di sini.

@vwxyutarooo , solusi langsung adalah mengatur clean: true dalam konfigurasi untuk mem-bypass cache sepenuhnya. Atau (maaf untuk stekernya) saya membuat https://github.com/wessberg/rollup-plugin-ts yang juga akan berfungsi dengan baik

@wessberg Ya, saya kira belum banyak plugin rollup yang memiliki async di antarmuka mereka.

Apakah Anda tahu cara yang lebih baik untuk melakukan hashing objek? Saya perlu membuat kunci cache sebagian berdasarkan pada objek konfigurasi rollup (dan karenanya berisi sumber semua plugin yang digunakan) yang diteruskan saat startup.

btw, untuk memperjelas - masalahnya berlaku untuk hal-hal async di konfigurasi rollup itu sendiri. Async dalam kode yang sedang ditranskripsikan tidak menjadi masalah, karena kode di-hash berdasarkan teks sumber.

Hmm, Anda bisa menerapkan sha1 ke hasil JSON. merangkai seluruh konfigurasi dengan pengganti khusus yang memetakan plugin ke properti name yang saya yakin diperlukan.
Misalnya, konfigurasi rollup berikut:

{
  // ...
  treeshake: true,
  plugins: [
    myPlugin1(),
    myPlugin2()
  ],
  // ...
}

Dapat diubah menjadi representasi JSON berikut:

{
  "treeshake": true,
  "plugins": [
    "name-of-my-plugin-1",
    "name-of-my-plugin-2"
  ]
}

Dan kemudian Anda dapat menerapkan sha1 dan mengeluarkan string base64 atau sesuatu seperti itu yang dapat Anda gunakan sebagai kunci cache?

Saya sedang memikirkan hal itu, tetapi bukankah itu akan menghapus lebih banyak hal dari pertimbangan untuk cache? Saya menduga object-hash dibuat secara khusus karena JSON.stringify membuang apa pun yang bukan properti nilai biasa, larik, atau kamus -- tidak ada yang lain dalam spesifikasi json.

Saya kira saya bisa memasukkan hash package-lock,json dan setara benang, jika ada cara yang dapat diandalkan untuk menemukannya. (untuk mengurangi efek opsi objectHashIgnoreUnknownHack )

Thanks guys membahas tentang masalah ini. Sebenarnya dosis opsi clean: true tidak mem-bypass proses cache sehingga tidak berfungsi bahkan untuk sementara waktu. Namun, ignoreUnknown mungkin merupakan cara untuk memperbaiki masalah ini seperti yang dikatakan @ezolenko . Saya akan menunggu 0.16.2 pula!

@vwxyutarooo , saya berasumsi bahwa clean: true menggunakan strategi cache noop. Itu yang saya ingat yang diterapkan @ezolenko beberapa waktu lalu. Jika masih mencoba menghitung kunci cache dari konfigurasi rollup, menurut saya perilaku itu perlu diperhatikan

Saya tidak tahu bagaimana ini memengaruhi hasil hash objek, Namun opsi objectHashIgnoreUnknownHack pada cabang objecthash berfungsi untuk saya.

Saya mengerjakan ulang cache sedikit sehingga clean: true bahkan tidak akan memanggil objek-hash dan menggabungkan semuanya menjadi master. Saya akan merilis dalam beberapa hari

Di 0.17.0 sekarang

Untuk solusi lain yang tidak menggunakan objectHashIgnoreUnknownHack hack, saya mengalami masalah ini menggunakan rollup-plugin-require-context , dan cuplikan berikut tampaknya berfungsi:

import requireContextORIGINAL from 'rollup-plugin-require-context'

const requireContext = (options) => {
  const plugin = requireContextORIGINAL(options)
  return {
    name: plugin.name,
    transform(code, id) {
      return plugin.transform(code, id)
    }
  }
}

Yaitu, menjadikan transform fungsi normal yang mengembalikan janji.

Saya pikir saya akan menambahkan pembaruan untuk orang-orang di sini bahwa akar penyebab di sini akhirnya diperbaiki di https://github.com/puleos/object-hash/pull/90 (sangat mirip dengan https://github.com/puleos/ object-hash/pull/68 direferensikan di atas) dan di sini di #203. Tidak perlu menggunakan objectHashIgnoreUnknownHack untuk mendukung plugin async dan tidak ada lagi masalah cache -- baru saja dirilis sebagai v0.26.0

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

freeman picture freeman  ·  6Komentar

eddow picture eddow  ·  14Komentar

mohd-akram picture mohd-akram  ·  22Komentar

kyle-johnson picture kyle-johnson  ·  10Komentar

Alxandr picture Alxandr  ·  21Komentar