首页 > 解决方案 > 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 获得相同的编译时优化?

感谢您对此的任何帮助。

标签: node.jswebpack

解决方案


我从webpack gitter那里得到了一些帮助;他们将我指向DefinePluginMode的方向。

事实证明这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)
  })
);

推荐阅读