箭头函数语法不适用于 webpack?

新手上路,请多包涵

我正在 react-redux 上制作一个应用程序。我使用 webpack 进行打包,使用 babel 进行转译。当我尝试在我的代码中使用箭头函数时。它给我的错误是:

 Module build failed: SyntaxError: Unexpected token (34:15)

};

> handleSubmit = (event) => {
                  ^
  event.preventDefault();

  this.props.dispatch(actions.addTodo(this.state.inputText));

我的 webpack 配置文件如下所示:

 module.exports = {
  devtool: 'inline-source-map',
  entry: [
    'webpack-hot-middleware/client',
    './client/client.js'
  ],
  output: {
    path: require('path').resolve('./dist'),
    filename: 'bundle.js',
    publicPath: '/'
  },
  plugins: [
    new webpack.optimize.OccurenceOrderPlugin(),
    new webpack.HotModuleReplacementPlugin(),
    new webpack.NoErrorsPlugin()
  ],
  module: {
    loaders: [
      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/,
        query: {
          presets: ['react', 'es2015', 'react-hmre']
        }
      }
    ]
  }
};

我在我的 package.json 中使用了以下 babel 包:

  "babel-cli": "^6.6.5",
"babel-core": "^6.4.5",
"babel-loader": "^6.2.2",
"babel-preset-es2015": "^6.3.13",
"babel-preset-react": "^6.3.13",
"babel-preset-react-hmre": "^1.1.1",

会出什么问题?

原文由 Ajay Gaur 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 471
2 个回答

暗戳戳,这个函数是在一个类里面的吗?作为类成员的箭头函数不包含在 ES2015(或 2016)中。如果你想做这样的事情:

 class Foo {
  bar = (baz) => {
    console.log(baz);
  }
}

您需要包含 babel-transform-class-properties

在您的示例中,您需要:

npm install --save-dev babel-plugin-transform-class-properties

并将您的装载机更改为

{
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/,
        query: {
          presets: ['react', 'es2015', 'react-hmre'],
          plugins: ['transform-class-properties']
        }
      }

原文由 Joe Ruello 发布,翻译遵循 CC BY-SA 3.0 许可协议

另外,如果你想习惯新的 babel show,你可以使用 babel.config.js 文件而不是 .babelrc 。这个想法类似于 webpack.config.js file ,但用于 babel 配置。它的使用方式如下:

 module.exports = {
  presets: [ "@babel/preset-env", "@babel/preset-react" ],
  plugins: [ "@babel/plugin-transform-arrow-functions", "@babel/plugin-proposal-class-properties" ]
}

确保安装所有这些插件以成功编译。我应该说 babel 本身只是建议在 .babelrc 文件中为每个人做所有这些事情。但是你知道,我们不是每个人。

原文由 amdev 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题