如果我错了,请更正我,但据文档了解,
--env
option仅在<{1}}内用于导出功能,例如在webpack.config.js
中用于访问它。
module.exports = function(env, options) {
console.log(env); // "production"
}
,假设我的入口点为index.js
,代码如下:
console.log(process.env.NODE_ENV); // undefined ???
我想知道
不管我通过process.env.NODE_ENV
还是--env.production
--env.development
都不会分配任何值
我想知道
webpack会根据--env
--mode
option用于立即启用一些优化,它将设置process.env.NODE_ENV
可以在我的源文件中访问,例如
console.log(process.env.NODE_ENV); // "production" OR "development", etc ???
我想知道
process.env.NODE_ENV
将被分配给从webpack.config.js
内访问它的任何值
我想知道
假设我使用以下命令$ webpack --mode="development"
我有webpack.config.js
的以下内容:
module.exports = {
devtool: 'source-map'
};
因此,devtool
选项最终是否会设置为eval
(如果我没有在devtool
中重新定义webpack.config.js
,或者值将是{{1} },那么它会被我的source-map
文件中的文件重写吗?
答案 0 :(得分:5)
我在这里问了类似的问题:Webpack environment variables confusion
首先:这两个选项与process.env.NODE_ENV
无关。是的,这特别令人困惑,因为文档多次提及NODE_ENV
。
webpack的环境变量与bash和CMD.exe等操作系统外壳的环境变量不同
--env
命令行选项基本上允许您更改env.{some property}
的值,因此,如果您只是传递--env.production
env.NODE_ENV
将是undefined
并且env.production
将设置为true
。您需要使用--env.NODE_ENV=yourvalue
单独设置它。 请注意,这与process.env
没有关系。 env
只是作为参数传递给从webpack.config.js
导出的函数的对象。
--mode
命令行选项,您可以使用它来将process.env.NODE_ENV
仅在DefinePlugin
上设置为以下选项之一值-development
,production
或none
。看起来它是专门为DefinePlugin制作的。如果您尝试在Webpack配置内进行console.log(process.env.NODE_ENV);
,则将为undefined
。 https://github.com/webpack/webpack/issues/7074
如果要阅读这些选项,则需要从webpack.config.js
导出函数而不是对象。
// webpack --mode=production --env.foo=bar --env.NODE_ENV=production
var config = {
entry: './app.js'
//...
};
console.log(process.env.NODE_ENV); // undefined!! unless you really set it in OS or with cross-env
module.exports = (env, argv) => {
console.log(argv.mode); // will print "production"
console.log(env.foo); // will print "bar"
return config;
};
人们还使用cross-env
来设置process.env.NODE_ENV
,他们根本不使用webpack的--env或--mode。
使用cross-env
的唯一原因是,如果您的项目中有多个配置,例如postcss.config.js
和webpack.config.js
,而您只想设置一次环境,请使用{{1} }并完成它。开箱即用,DefinePlugin
根本无法使用。
如果您不想使用交叉环境,也可以这样做:
process.env.NODE_ENV
或基于process.env.NODE_ENV设置模式:
module.exports = (env, argv) => {
process.env.NODE_ENV = argv.mode;
return config;
};