我正在项目中设置Redux DevTools(https://www.npmjs.com/package/redux-devtools),并希望在构建生产项目时排除DevTools。文档说这可以通过使用以下代码来完成:
if (process.env.NODE_ENV === 'production') {
module.exports = require('./configureStore.prod');
} else {
module.exports = require('./configureStore.dev');
}
我已经有一个带常量的模块,所以我已经把NODE_ENV的检查放在那里。
Constants.PRODUCTION = process.env.NODE_ENV === 'production'
在我的Webpack配置文件中,我有以下代码,它应该像它应该的那样:
const production = process.env.NODE_ENV === 'production'
var config = {
// configuration goes here
}
if (production) {
config.plugins = [
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false,
},
}),
].concat(config.plugins)
}
运行set NODE_ENV=production&&webpack
时,构建内容会缩小并仅使用webpack
dosen来缩小构建。但是,在源代码本身中,NODE_ENV未定义:
console.log(process.env.NODE_ENV) // Output: Undefined
如果我将Constants.PRODUCTION
设置为true
,则构建中不包含DevTools。不知怎的,我应该使用DefinePlugin或ProvidePlugin(Redux DevTools文档提到它们但在不同的地方),但我无法弄清楚如何。我使用Windows 10,DevTools 3.0.0和npm脚本来运行构建过程。任何人都可以帮助我在我的webpack配置文件中设置DefinePlugin或ProvidePlugin吗?
答案 0 :(得分:3)
我自己解决了;在webpack配置文件中我添加了这个:
plugins: [
// Some other plugins
new webpack.DefinePlugin({
PRODUCTION: production,
})
]
我将Constants模块中的代码更改为
Constants.PRODUCTION = PRODUCTION
这是有效的。现在运行我的npm脚本时,我得到了一个没有模块的构建,因为在uglifying期间完全删除了,我可以像以前一样启动webpack dev服务器,然后我加载了Redux DevTools:
"scripts": {
"start": "set NODE_ENV=development&&webpack-dev-server",
"build": "set NODE_ENV=production&&webpack --progress --colors"
}
问题中的第一个代码片段如下所示:
if (Constants.PRODUCTION) {
module.exports = require('./configureStore.prod');
} else {
module.exports = require('./configureStore.dev');
}
答案 1 :(得分:0)
基于webpack documentation。设置webpack -p
将执行以下操作
因此,您需要做的就是设置-p标志,而不是手动设置NODE_ENV。像这样的东西
"scripts": {
"start": "webpack-dev-server",
"build": "webpack -p --progress --colors"
}