web-dev-qa-db-fra.com

Babel 7 échoue avec un seul plugin disant "plug-in/préréglage en double détecté."

Le plugin qui échoue est @babel/plugin-transform-regenerator (pas de plugin marginal, 1,6 million de téléchargements/semaine).

C'est tout mon .babelrc:

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

Lorsque j'essaie de le transpiler avec colis en utilisant parcel build source/main/index.html --no-source-maps --out-dir build, j'obtiens le message d'erreur suivant: 

/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)

Voici mes versions de package.json:

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

Des idées?

2
Rasto

Il s’agit d’une erreur babel qui indique en gros que vous avez défini votre plugin @babel/plugin-transform-regenerator deux fois - plus ou moins indirectement.

Parcel Bundler transpile votre code par défaut avec le préréglage Babel @babel/preset-env. Ces presets en général ne sont que des listes de plugins partageables. Comme vous pouvez le voir ici , preset-env inclut déjà "@babel/plugin-transform-regenerator" dans Babel 7.

Solution simple: supprimez simplement "@babel/plugin-transform-regenerator" de la configuration de vos plugins dans .babelrc.

PS: j'ai vécu une expérience similaire après avoir migré de la version 6 à la version 7. Mon ancienne configuration ressemblait à ceci (valable dans 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"]

J'ai dû supprimer les plugins transform-object-rest-spread, transform-async-generator-functions et transform-async-to-generator, qui - comme dit - sont inclus dans env (ici explicitement spécifié).

Babel propose un outil de mise à niveau fantastique appelé babel-upgrade (surprise, surprise), qui a bien fait le travail pour renommer les plugins, mais malheureusement, il m’a laissé seul avec ces "doublons".

J'espère que cela pourra aider.

1
ford04

Après quelques recherches, la cause la plus probable de l’erreur mentionnée est qu’un ou plusieurs plug-ins par défaut sont également utilisés en interne par ce plug-in.

Le moyen le plus simple de résoudre le problème consiste à procéder comme indiqué par l'erreur: Ajoutez un nom unique au plug-in:

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

0
icecub