IE11もサポートする必要があるため、node_modules
もトランスパイルする必要があります。
これは、node_modulesで使用するbabel構成です。
presets: [
['@babel/preset-env', { modules: false, useBuiltIns: 'usage' }],
],
エラーSymbol is not defined
が発生したため、useBuiltIns
オプションを使用しましたが、ポリフィルが必要でした。
ただし、この構成はコンパイル時に壊れます。おそらくコードにimports
が挿入されているためです。ここにエラーがあります。
基本的には、module.exports
を好みません。では、ベンダーバンドルでuseBuiltIns
を使用するにはどうすればよいですか?
今のところ、index.html
にバベルポリフィルを常に必要とすることで解決しましたが、これは理想的ではありません。
デフォルトでは、Babelは、処理するファイルがESモジュールであると想定します(import
およびexport
を使用)。 node_modules
(CommonJSモジュールの可能性が高い)でBabelを実行している場合は、すべてのnode_modules
をスクリプトとして処理するようにBabelに指示するか、Babelに基づいてタイプを推測するように指示する必要がありますimport
およびexport
の存在。推測が最も簡単なので、追加できます
sourceType: "unambiguous"
また、core-js
自体に対してusage
変換を実行しないようにBabelに指示します。
ignore: [
/\/core-js/,
],
それ以外の場合、usage
変換は実際にcore-js
への参照をitselfに挿入し、依存サイクルを引き起こします。
したがって、トップレベルのBabel構成では、次のようにします。
{
ignore: [
/\/core-js/,
],
sourceType: "unambiguous",
presets: [
['@babel/preset-env', { modules: false, useBuiltIns: 'usage' }],
],
}
それについてさらに具体的にしたい場合は、
{
ignore: [
/\/core-js/,
],
presets: [
['@babel/preset-env', { modules: false, useBuiltIns: 'usage' }],
],
overrides: [{
test: "./node_modules",
sourceType: "unambiguous",
}],
}
node_modules
内のファイルにフラグを設定するだけですが、そうすることで得られるものはほとんどありません。
whyについては、このエラーが修正されます。問題は、BabelがESモジュールであると考える場合、import
ステートメントを挿入することです。 import
ステートメントをmodule.exports
のようなCommonJSのものも使用するファイルに挿入すると、ファイルは両方のモジュールシステムを同じファイルで使用することになります。これは大きな問題であり、エラーの原因になりますあなたが見ています。