EnvironmentPlugin
是在DefinePlugin
的简写方式。
EnvironmentPlugin
接受任意一个键(key)的数组。
new webpack.EnvironmentPlugin(['NODE_ENV', 'DEBUG'])
这相当于以下 DefinePlugin
应用程序:
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
'process.env.DEBUG': JSON.stringify(process.env.DEBUG)
})
T> 不指定环境变量会引发"`EnvironmentPlugin` - `${key}` environment variable is undefined"(环境变量未定义)错误。
## 带默认值的用法
或者,`EnvironmentPlugin` 支持一个对象,它将键(key)映射到其默认值。 如果在`process.env`中未定义键,则采用键键(key)的默认值。
```js
new webpack.EnvironmentPlugin({
NODE_ENV: 'development', // 使用 'development' ,除非 process.env.NODE_ENV 被定义
DEBUG: false
})
W> 来自 process.env
are always strings的变量总是字符串。
T> 与DefinePlugin
不同,默认值通过 EnvironmentPlugin
应用于JSON.stringify
。
T> 要指定未设置的默认值,请使用 null
而不是 undefined
。
示例:
当在测试文件 entry.js
上运行以前的EnvironmentPlugin
配置时,让我们查看结果:
if (process.env.NODE_ENV === 'production') {
console.log('Welcome to production');
}
if (process.env.DEBUG) {
console.log('Debugging output');
}
当在终端中执行 NODE_ENV=production webpack
构建时,entry.js
变为:
if ('production' === 'production') { // <-- 'production' from NODE_ENV is taken
console.log('Welcome to production');
}
if (false) { // <-- default value is taken
console.log('Debugging output');
}
运行 DEBUG=false webpack
生成:
if ('development' === 'production') { // <-- default value is taken
console.log('Welcome to production');
}
if ('false') { // <-- 'false' from DEBUG is taken
console.log('Debugging output');
}