web-dev-qa-db-ja.com

Babel 7は、「プラグイン/プリセットの重複が検出されました」という単一のプラグインで失敗します。

失敗するプラグインは @babel/plugin-transform-regenerator (限界プラグインなし、1.6ミリオンのダウンロード/週)です。

これは私の.babelrc全体です:

{
  "presets": [],
  "plugins": [
    "@babel/plugin-transform-regenerator"
  ]
}

parcel build source/main/index.html --no-source-maps --out-dir buildを使用してパーセルでトランスパイルしようとすると、次のエラーが表示されます。

/path/to/index.js: Duplicate plugin/preset detected.
If you'd like to use two separate instances of a plugin,
they need separate names, e.g.

plugins: [
  ['some-plugin', {}],
  ['some-plugin', {}, 'some unique name'],
]

at assertNoDuplicates (/.../node_modules/@babel/core/lib/config/config-descriptors.js:205:13)
at createDescriptors (/.../node_modules/@babel/core/lib/config/config-descriptors.js:114:3)
at createPluginDescriptors (/.../node_modules/@babel/core/lib/config/config-descriptors.js:105:10)
at alias (/.../node_modules/@babel/core/lib/config/config-descriptors.js:63:49)
at cachedFunction (/.../node_modules/@babel/core/lib/config/caching.js:33:19)
at plugins.plugins (/.../node_modules/@babel/core/lib/config/config-descriptors.js:28:77)
at mergeChainOpts (/.../node_modules/@babel/core/lib/config/config-chain.js:314:26)
at /.../node_modules/@babel/core/lib/config/config-chain.js:278:7
at buildRootChain (/.../node_modules/@babel/core/lib/config/config-chain.js:68:29)
at loadPrivatePartialConfig (/.../node_modules/@babel/core/lib/config/partial.js:85:55)

Package.jsonのバージョンは次のとおりです。

"@babel/core": "^7.1.2",
"@babel/plugin-transform-regenerator": "^7.0.0",

何か案は?

8
Rasto

これは基本的に、プラグイン@babel/plugin-transform-regeneratorを2回(ほぼ間接的に)定義したというバベルエラーです。

Parcel Bundlerは、コードをトランスパイルします デフォルト Babelプリセット@babel/preset-env。これらのプリセットは一般的に、プラグインの共有可能なリストにすぎません。 here を見るとわかるように、preset-envには既にBabel 7の"@babel/plugin-transform-regenerator"が含まれています。

簡単な解決策:"@babel/plugin-transform-regenerator"のプラグイン設定から.babelrcを削除するだけです。

PS:バージョン6から7に移行した後、同様の経験がありました。私の古い設定はこのように見えました(Babel 6で有効)

  "plugins": [
    "react-hot-loader/babel", 
    "transform-object-rest-spread", 
    "transform-class-properties", 
    "transform-runtime",
    "transform-async-generator-functions",
    "transform-async-to-generator"
  ],
  "presets": ["env", "react"]

プラグインtransform-object-rest-spreadtransform-async-generator-functions、およびtransform-async-to-generatorを削除する必要がありましたが、これらはenv(ここでは明示的に指定)に含まれています。

Babelはbabel-upgrade(サプライズ、サプライズ)と呼ばれる素晴らしいアップグレードツールを提供します。これはプラグインの名前を変更するのに十分な仕事をしましたが、残念ながらこれらの "重複"を残しました。

希望、それが役立ちます。

5
ford04

いくつかの調査を行った後、言及されたエラーの最も可能性の高い原因は、このプラグインによって内部的にも使用される1つ以上のデフォルトプラグインがあることです。

問題を解決する最も簡単な方法は、エラーが示す内容を実行することです。プラグインに一意の名前を追加します。

"plugins": ["@babel/plugin-transform-regenerator", {}, 'unique-name']

0
icecub