Javascript webpack--env.production和--mode=";生产";
如果我错了,请纠正我,但据我从文档中了解Javascript webpack--env.production和--mode=";生产";,javascript,webpack,Javascript,Webpack,如果我错了,请纠正我,但据我从文档中了解 --env仅用于在导出函数(例如 module.exports = function(env, options) { console.log(env); // "production" } 假设我的入口点index.js包含以下代码: console.log(process.env.NODE_ENV); // undefined ??? 我想知道是否 process.env.NODE\u env不会被分配给任何值,无论我是否通过了--环境生产或-
--env
仅用于在导出函数(例如
module.exports = function(env, options) {
console.log(env); // "production"
}
假设我的入口点index.js
包含以下代码:
console.log(process.env.NODE_ENV); // undefined ???
我想知道是否process.env.NODE\u env
不会被分配给任何值,无论我是否通过了--环境生产
或--环境开发
我想知道是否webpack将根据
--env
--mode
用于立即启用一些优化,它将process.env.NODE\u env
设置为可在我的源文件中访问,例如
console.log(process.env.NODE_ENV); // "production" OR "development", etc ???
我想知道是否process.env.NODE\u env
将被分配给从webpack.config.js
我想知道是否假设我使用以下命令运行webpack
$webpack--mode=“development”
我有webpack.config.js
的以下内容:
module.exports = {
devtool: 'source-map'
};
因此,
devtool
选项最终会被设置为eval
(如果我没有在我的webpack.config.js
中重新定义devtool
,或者该值将是源代码映射
,那么它将被从我的webpack.config.js
文件中重写?我在这里问了一个类似的问题:
首先:这两个选项与process.env.NODE\u env
无关。是的,这很令人困惑,尤其是因为文档多次提到NODE\u env
webpack的环境变量与操作系统外壳(如bash和CMD.exe)的环境变量不同
命令行选项基本上允许您更改--env
因此,如果您只通过env.{some property}的值
--env.production
将是环境节点_env
,而未定义的
将设置为环境生产
。您需要使用真
单独设置它。请注意,这与--env.NODE_env=yourvalue
环境无关ode>只是作为参数传递给从过程
导出的函数的对象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; };
命令行选项是在webpack v4中引入的,您可以使用它将--mode
仅设置为三个值之一-process.env.NODE_env
、development
或production
。看起来它是专门为DefinePlugin设计的。如果您尝试none
在您的网页配置中,它将是console.log(process.env.NODE_env);
未定义的
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
使用跨环境的唯一原因是,如果您的项目中有多个配置,如postsss.config.js
和webpack.config.js
,并且您只想设置一次环境,那么在任何地方都可以使用process.env.NODE\u env
并完成它。它只是无法在开箱即用的情况下工作
如果不想使用交叉环境,也可以这样做:
module.exports = (env, argv) => {
process.env.NODE_ENV = argv.mode;
return config;
};
或基于process.env.NODE_env设置模式:
var config = {
entry: './app.js',
mode: process.env.NODE_ENV
//...
};
更新2021
webpack现在添加了一个新选项--node env
,因此您不需要依赖cross env,除非您在其他地方使用它