node.js - webpack中的编译时变量,NODE_ENV有什么特别的吗?
问题描述
我正在使用 webpack 4.41.6。
如果我在我的一个 JS 文件中有这个:
const var1 = process.env.NODE_ENV === 'development' ? 'foo' : 'bar';
const var2 = process.env.SOME_VAR === 'something' ? 'moo' : 'cow';
console.log(var1, var2);
然后运行SOME_VAR=something NODE_ENV=production webpack
,我得到:
a="something"===e.env.SOME_VAR?"moo":"cow";console.log("bar",a);
NODE_ENV 有什么特别之处?如何使用 SOME_VAR 获得相同的编译时优化?
感谢您对此的任何帮助。
解决方案
我从webpack gitter那里得到了一些帮助;他们将我指向DefinePlugin和Mode的方向。
事实证明这NODE_ENV
是特殊的,它会导致生成这样的东西:
new webpack.DefinePlugin({ "process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV) })
我忽略了这一点,因为我的 webpack 配置或节点依赖项中没有 DefinePlugin;显然它是内置的?
我将此添加到我的 webpack 配置中,现在它可以按我希望的方式工作:
plugins.push(
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
'process.env.SOME_VAR': JSON.stringify(process.env.SOME_VAR)
})
);