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?
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,
})
],
...
};
Tidak relevan.
Tidak relevan.
[!] (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)
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
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