このプラグインは、 object-hashの問題とtscache.tsによって引き起こされるasync / await構文を含むプラグインでは機能しません。 現在、非同期関数を検出する方法がないため、これをオブジェクトハッシュで修正するのは難しいと思います。 では、オブジェクトハッシュなしの代替手段はありますか?
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,
})
],
...
};
関係ありません。
関係ありません。
[!] (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)
オブジェクトハッシュが処理できないものをすべて無視する回避策を追加しました(objecthashブランチのobjectHashIgnoreUnknownHack
オプションを参照)。 ただし、これによりキャッシュが古くなる可能性があるため、長期的な解決策としては適切ではありません。
@wessberg
非同期関数は今では非常に一般的であるため、これがこれまでのところそれほど問題になっていないことに驚いていることを認めなければなりません😀。 それはまた、単にそれを無視することは多くのキャッシュの問題につながると私が思う理由でもあります。 しばらく前にオブジェクトハッシュに送信したPRは、まさにこの問題の結果でした。オブジェクトハッシュへの依存を削除することをお勧めします。 しばらく前に送信されたPRは、エラーメッセージで提供されたものと同じ値に一致し、両方の単体テストに合格し、このプラグインの問題を解決したため、問題なく機能すると確信しています。PRに依存してください。ここではNPMパッケージではなく。
@vwxyutarooo 、即時の回避策は、キャッシュを完全にバイパスするように構成にclean: true
を設定することです。 または(プラグインで申し訳ありません) https://github.com/wessberg/rollup-plugin-tsをビルドしましたが、これも問題なく動作します
@wessbergええ、まだ多くのロールアッププラグインのインターフェースに非同期がありません。
オブジェクトをハッシュするより良い方法を知っていますか? 起動時に渡されるロールアップ構成オブジェクトに部分的に基づいて(したがって、使用されるすべてのプラグインのソースを含む)キャッシュキーを作成する必要があります。
ところで、明確にするために-問題はロールアップ設定自体の非同期のものに適用されます。 コードはソーステキストに基づいてハッシュされるため、トランスパイルされるコードの非同期は問題ではありません。
うーん、まあ、プラグインをname
プロパティにマップするカスタムリプレースメントを使用して構成全体をJSON.stringifyした結果にsha1を適用できます。これは、かなり必要だと確信しています。
たとえば、次のロールアップ構成:
{
// ...
treeshake: true,
plugins: [
myPlugin1(),
myPlugin2()
],
// ...
}
次のJSON表現に変換できます。
{
"treeshake": true,
"plugins": [
"name-of-my-plugin-1",
"name-of-my-plugin-2"
]
}
そして、sha1を適用して、base64文字列またはキャッシュキーとして使用できるようなものを取得できますか?
私はそれらの線に沿って考えていましたが、それはキャッシュの考慮からさらに多くのものを削除しませんか? object-hash
が作成されたのは、 JSON.stringify
がプレーンな値のプロパティ、配列、辞書以外のものをすべて破棄するためだと思います。json仕様には他に何もありません。
信頼できる方法があれば、 package-lock,json
ハッシュとそれに相当する糸を組み込むことができると思います。 ( objectHashIgnoreUnknownHack
オプションの影響を軽減するため)
この問題について話し合ってくれてありがとう。 実際、 clean: true
オプションはキャッシュプロセスをバイパスしないため、しばらくの間も機能しません。 ただし、 @ ezolenkoが言うように、 ignoreUnknown
がこの問題を修正する方法である可能性があります。 とにかく0.16.2待ちます!
@vwxyutarooo 、私はclean: true
がnoopキャッシュ戦略を使用していると仮定していました。 @ezolenkoが少し前に実装したことを覚えています。 それでもロールアップ構成からキャッシュキーを計算しようとする場合、その動作を調べる必要があります
これがオブジェクトハッシュの結果にどのように影響するかはわかりませんが、 objecthash
ブランチのobjectHashIgnoreUnknownHack
オプションは機能します。
clean: true
がオブジェクトハッシュを呼び出さないようにキャッシュを少し作り直し、すべてをマスターにマージしました。 数日でリリースします
0.17.0で今
別の回避策のために使用していないobjectHashIgnoreUnknownHack
ハック、私が使用してこの問題に遭遇したrollup-plugin-require-context
、そして次のスニペットは、動作しているようです:
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)
}
}
}
つまり、 transform
を通常の関数にしてpromiseを返します。
ここの人々のためにアップデートを追加すると思いましたが、ここの根本的な原因は最終的にhttps://github.com/puleos/object-hash/pull/90(https://github.com/puleos/と非常によく似ています)で修正されましたobject-hash / pull / 68上記参照)およびここ#203。 非同期プラグインをサポートするためにobjectHashIgnoreUnknownHack
を使用する必要はなく、キャッシュの問題もありません-v0.26.0としてリリースされました🎉😄
最も参考になるコメント
非同期関数は今では非常に一般的であるため、これがこれまでのところそれほど問題になっていないことに驚いていることを認めなければなりません😀。 それはまた、単にそれを無視することは多くのキャッシュの問題につながると私が思う理由でもあります。 しばらく前にオブジェクトハッシュに送信したPRは、まさにこの問題の結果でした。オブジェクトハッシュへの依存を削除することをお勧めします。 しばらく前に送信されたPRは、エラーメッセージで提供されたものと同じ値に一致し、両方の単体テストに合格し、このプラグインの問題を解決したため、問題なく機能すると確信しています。PRに依存してください。ここではNPMパッケージではなく。
@vwxyutarooo 、即時の回避策は、キャッシュを完全にバイパスするように構成に
clean: true
を設定することです。 または(プラグインで申し訳ありません) https://github.com/wessberg/rollup-plugin-tsをビルドしましたが、これも問題なく動作します