javascript - Babel 不转译箭头函数 (Webpack)

标签 javascript webpack babeljs

当运行 webpack 和 babel 时,生成的 bundle.js 仍然包含箭头函数。在 Internet Explorer 10 中运行时,这会给我一个语法错误。我希望 babel 将箭头函数替换为 IE 可以运行的正常函数。

我的 package.json 具有以下 devDependencies:

"devDependencies": {
  "babel-cli": "^6.26.0",
  "babel-core": "^6.26.0",
  "babel-loader": "^7.1.4",
  "babel-preset-env": "^1.6.1",
  "babel-preset-es2015": "^6.24.1",
  "babel-preset-react": "^6.24.1",
  "babel-preset-stage-1": "^6.24.1",
  "css-loader": "^0.28.9",
  "imports-loader": "^0.7.1",
  "style-loader": "^0.19.1",
  "webpack": "^3.11.0",
  "webpack-dev-server": "^2.11.2"
}

我的 webpack.config.js 看起来像这样:

module.exports = {
  entry: [
    'babel-polyfill',
    './src/index.js'
  ],
  output: {
    path: __dirname,
    publicPath: '/',
    filename: 'bundle.js'
  },
  module: {
    rules: [
    {
      test: /\.js$/,
      exclude: /node_modules/,
      loader: 'babel-loader'
    },
    {
      test: /\.css$/,
      use: ['style-loader', 'css-loader']
    }
    ],
  },
  resolve: {
    enforceExtension: false,
    extensions: ['.js', '.jsx']
  },
  devServer: {
    host: '0.0.0.0',
    port: 5000,
    historyApiFallback: true,
    contentBase: './'
  }
};

我的 .babelrc 看起来像这样:

{ 
  "presets": 
  [
    ["env", { "targets": {"browsers": ["last 2 versions"]}, "debug": true }], 
    "react", 
    "stage-3"
  ]
}

为了转译,我运行命令:

npm run build --production

然后我在控制台中得到以下输出:

Using targets:
{
  "chrome": "62",
  "android": "4.4.3",
  "edge": "15",
  "firefox": "56",
  "ie": "10",
  "ios": "10.3",
  "safari": "10.1"
}

Modules transform: commonjs

Using plugins:
  check-es2015-constants {"android":"4.4.3","ie":"10"}
  transform-es2015-arrow-functions {"android":"4.4.3","ie":"10"}
  transform-es2015-block-scoped-functions {"android":"4.4.3","ie":"10"}
  transform-es2015-block-scoping {"android":"4.4.3","ie":"10"}
  transform-es2015-classes {"android":"4.4.3","ie":"10"}
  transform-es2015-computed-properties {"android":"4.4.3","ie":"10"}
  transform-es2015-destructuring {"android":"4.4.3","edge":"15","ie":"10"}
  transform-es2015-duplicate-keys {"android":"4.4.3","ie":"10"}
  transform-es2015-for-of {"android":"4.4.3","ie":"10"}
  transform-es2015-function-name {"android":"4.4.3","edge":"15","ie":"10"}
  transform-es2015-literals {"android":"4.4.3","ie":"10"}
  transform-es2015-object-super {"android":"4.4.3","ie":"10"}
  transform-es2015-parameters {"android":"4.4.3","ie":"10"}
  transform-es2015-shorthand-properties {"android":"4.4.3","ie":"10"}
  transform-es2015-spread {"android":"4.4.3","ie":"10"}
  transform-es2015-sticky-regex {"android":"4.4.3","ie":"10"}
  transform-es2015-template-literals {"android":"4.4.3","ie":"10"}
  transform-es2015-typeof-symbol {"android":"4.4.3","ie":"10"}
  transform-es2015-unicode-regex {"android":"4.4.3","ie":"10"}
  transform-regenerator {"android":"4.4.3","ie":"10"}
  transform-exponentiation-operator {"android":"4.4.3","ie":"10"}
  transform-async-to-generator {"android":"4.4.3","ie":"10"}
  syntax-trailing-function-commas {"android":"4.4.3","ie":"10"}

transform-es2015-arrow-functions 被列为包含在内,但是当我打开生成的 bundle.js 时,例如,我可以看到以下内容:

...

function encoderForArrayFormat(options) {
    switch (options.arrayFormat) {
        case 'index':
            return (key, value, index) => {
                return value === null ? [
                    encode(key, options),
...

上面使用了箭头函数,并在 Internet Explorer 中产生语法错误。其他 ES6 内容,如“...”被转译。

我做错了什么?

最佳答案

我认为一个问题与 query-string 有关因为它是用 ES6 编写的,没有转译为 ES5。尝试将版本从 6 降级到 5。

yarn add query-string@5.1.1

关于javascript - Babel 不转译箭头函数 (Webpack),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49954618/

相关文章:

ruby-on-rails - 模块构建失败 : Error: spawn bin/rails ENOENT

javascript - 是否可以在我自己的项目中使用另一个包中的 npm 依赖项?

javascript - React JSX - Babel Transpilation - 它是如何工作的?

javascript - 可选的链接运算符在将我的应用程序构建到 Heroku 时给出 SyntaxError 但在我的机器上工作

mocha.js - babel-istanbul 覆盖从报告中排除文件但保留转译

javascript - jQuery 点击无法识别

javascript - 用文本填充 div

javascript - Axios 在浏览器的 ESM 包中使用 NodeJS 内置函数,使其不兼容

javascript - 带通配符的 Gulp SASS watch 命令目标路径

javascript - 避免两次包含js文件的方法