"只允许一个babel-polyfill实例"错误

foo*_*bar 12 babel reactjs webpack babel-polyfill

我需要帮助诊断和修复此错误:

"Error: only one instance of babel-polyfill is allowed"
Run Code Online (Sandbox Code Playgroud)

我的package.json中有以下内容:

"devDependencies": {
    "babel-core": "^6.23.1",
    "babel-jest": "^19.0.0",
    "babel-loader": "^6.3.2",
    "babel-plugin-transform-object-rest-spread": "^6.23.0",
    "babel-preset-es2015": "^6.22.0",
    "babel-preset-react": "^6.23.0" ...

"dependencies": {
    "babel-polyfill": "^6.23.0" ...
Run Code Online (Sandbox Code Playgroud)

这个和我的webpack配置中的这个输入行:

entry: ["babel-polyfill", path.resolve(APP_PATH, 'index')],
...
module: {
 rules: [
  {
    test: /\.js$/,
    exclude: /node_modules/,
    loader: 'babel-loader',
    query: {
      // specify that we will be dealing with React code
      presets: ['react', 'es2015']
    }
  }
]}
Run Code Online (Sandbox Code Playgroud)

小智 10

如果罪魁祸首是HtmlWebpackPlugin,则需要inject: false在实例化插件时添加选项.某些没有此选项的配置会导致您构建的javascript代码被加载两次.


Jam*_*ser 6

幂等的 Babel Polyfill 可以多次导入

从 NPM 安装

npm install --save idempotent-babel-polyfill
Run Code Online (Sandbox Code Playgroud)

然后导入

import 'idempotent-babel-polyfill';
Run Code Online (Sandbox Code Playgroud)


m.r*_*ram 1

可能您是从其他 babel 模块间接获取它。

可能的解决方案:

  1. 使所有版本的 babel 模块相同。可能是由于 babel-polyfil 版本不同而导致错误。
  2. 从 package.json 中删除 babel-polyfil,以便从 babel-plugin-transform-object-rest-spread 中使用它

参考: https: //github.com/babel/babel/issues/1019

詹姆斯克的评论

无论如何我想通了。看起来 babel-runtime 已移至 babel-plugin-transform-runtime,需要将其添加到插件列表中才能使用它。如果在某处记录下来会有帮助。