我在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",
会出现什么问题?
答案 0 :(得分:71)
在黑暗中刺,这个功能在一个班级里面?作为类成员的箭头函数不包含在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']
}
}
答案 1 :(得分:4)
这正是对我有用的:
1)安装babel-plugin-transform-class-properties:
sudo npm install --save-dev babel-plugin-transform-class-properties
2)为您的规则添加选项(不是查询):
module.exports = {
..........
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /(node_modules|bower_components)/,
loader: 'babel-loader',
options: {
presets: ['env', 'react', 'es2015'],
plugins: ['transform-class-properties']
}
},
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
]
},
..........
};
答案 2 :(得分:3)
此外,如果您想习惯新的babel节目,可以使用babel.config.js
文件而不是.babelrc
。这个想法类似于webpack.config.js
文件,但是用于babel配置。它的用法如下:
module.exports = {
presets: [ "@babel/preset-env", "@babel/preset-react" ],
plugins: [ "@babel/plugin-transform-arrow-functions", "@babel/plugin-proposal-class-properties" ]
}
确保安装所有这些插件以成功编译。我应该说,babel本身建议对.babelrc
文件进行所有这些处理。但是你知道,我们不是每个人。
答案 3 :(得分:2)
首先,您需要将.babelrc文件编辑为
{
"presets": ["react", ["es2016"]],
"plugins": [
"babel-plugin-transform-class-properties"
]
}
第二npm install babel-plugin-transform-class-properties
和babel-preset-es2016
答案 4 :(得分:0)
在我的应用程序中,此问题是由错误地将较少加载程序错误地添加为依赖包而不是devDependency引起的。
将较少的加载程序从依赖项移动到package.json文件中的devDependencies即可解决此问题。