我在NodeJs React应用程序中使用webpack和babel时会收到一个自动生成的错误代码:
Uncaught ReferenceError: Invalid left-hand side in assignment
以下是babel / webpack自动生成的代码中的违规行:
"development" = 'development'; // bundle.js line 17933
如果我从自动生成的代码中手动删除上面的行,那么错误就会消失。但出于明显的原因,这不是一个好的解决方案。
我正在使用webpack 4,如 package.json 的摘录所示:
"babel-loader": "^7.1.4",
"babel-preset-stage-0": "^6.24.1",
"webpack": "^4.1.1",
"webpack-cli": "^2.0.12"
这是我的 webpack.config.js :
module.exports = {
entry: './source/main.js',
output: {
path: __dirname,
filename: 'public/javascripts/bundle.js'
},
devtool: "inline-source-map",
module: {
rules: [
{
test: /.js?$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: ['react', 'stage-0']
}
}
}
]
}
};
我像这样构建 bundle.js :
node_modules/.bin/webpack --mode development
如果我保持一切相同但使用 webpack 3.11.0 并卸载 webpack-cli 并构建 bundle.js ,则错误就会消失像这样:
node_modules/.bin/webpack
注意:最新的webpack 3.X版本支持 webpack.config.js 中显示的webpack 4.X语法。 < / p>
详细说明:
$ node --version
v9.8.0
$ npm --version
5.7.1
答案 0 :(得分:0)
我要做的是从 webpack.config.js 模块中导出一个函数。
导出函数时,将使用2个参数调用该函数:将环境作为第一个参数(可以忽略),将选项映射作为第二个参数。
您可以使用此方法将--mode
作为选项传递给Webpack CLI,并使用它通过process.env.NODE_ENV
定义DefinePlugin
。这可能是巴贝尔正在寻找的东西。
这样的事情:
const { DefinePlugin } = require('webpack');
...
module.exports = (env, options) => {
...
plugins: [
new DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(options.mode)
})
]
};
答案 1 :(得分:0)
您可能在代码中的某处有此行(或类似内容):
process.env.NODE_ENV = 'development';
在构建时,Webpack的DefinePlugin将process.env.NODE_ENV
替换为实际值(在您的情况下为development
),结果将是:"development" = 'development';
,这将引发错误。