Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript webpack--env.production和--mode=";生产";_Javascript_Webpack - Fatal编程技术网

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;
    };
    
  • --mode
    命令行选项是在webpack v4中引入的,您可以使用它将
    process.env.NODE_env
    仅设置为三个值之一-
    development
    production
    none
    。看起来它是专门为DefinePlugin设计的。如果您尝试
    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,除非您在其他地方使用它