40

如何在webpack.config.js中获取package.json--mode中指定的电流?(例如,用于推送一些插件。)

package.json

"scripts": {
  "dev": "webpack --mode development",
  "build": "webpack --mode production"
}

我在 Webpack 3 中做了什么:

package.json

"scripts": {
    "build": "cross-env NODE_ENV=development webpack",
    "prod": "cross-env NODE_ENV=production webpack"
  },

然后,我能够在 Webpack 中使用process.env.NODE_ENV.

当然,我可以通过NODE_ENV--mode但我更愿意避免重复。

4

4 回答 4

77

您希望避免在脚本上传递的选项重复。

导出函数时,将使用 2 个参数调用该函数:一个环境env作为第一个参数,一个选项映射argv作为第二个参数。

包.json

"scripts": {
  "build-dev": "webpack --mode development",
  "build-prod": "webpack --mode production"
},

webpack.config.js

module.exports = (env, argv) => {
    console.log(`This is the Webpack 4 'mode': ${argv.mode}`);
    return {
        ...
    };
}

这些是结果:

对于npm run build-dev

> webpack --mode development

This is the Webpack 4 'mode': development
Hash: 554dd20dff08600ad09b
Version: webpack 4.1.1
Time: 42ms
Built at: 2018-3-14 11:27:35

对于npm run build-prod

> webpack --mode production

This is the Webpack 4 'mode': production
Hash: 8cc6c4e6b736eaa4183e
Version: webpack 4.1.1
Time: 42ms
Built at: 2018-3-14 11:28:32
于 2018-03-14T15:29:34.390 回答
8

为了测试是否处于生产模式,在webpack.config.js文件中我使用这个:

const isProduction = process.argv[process.argv.indexOf('--mode') + 1] === 'production';

const config = {
    ...
};

if (isProduction) {
    config.plugins.push(new MiniCssExtractPlugin());
} else { // isDev
    config.devtool = /*'source-map'*/  'inline-source-map';
}

module.exports = config;

别再尝试了NODE_ENV,老派(webpack 3)。

这更兼容 import / webpack resolver

于 2019-02-01T15:55:18.063 回答
3

试试这个

包.json

"scripts": {
  "dev": "webpack --mode development",
  "build": "webpack --mode production --env.production"
}

所以如果你使用env内部webpack config,看起来像这样

module.exports = env => {
     const inProduction = env.production
     return  {
        entry: {...},
        output: {...},
        module: {...}
     }
}

更多详细信息来设置您的webpack.config.js. (webpack 4 的环境变量

于 2018-03-14T14:52:44.320 回答
0

我最终(ab)使用npm_lifecycle_script在以下位置设置模式DefinePlugin

MODE: JSON.stringify(process.env.npm_lifecycle_script.substr(process.env.npm_lifecycle_script.indexOf('--mode ') + '--mode '.length, process.env.npm_lifecycle_script.substr(process.env.npm_lifecycle_script.indexOf('--mode ') + '--mode '.length).search(/($|\s)/)))

--mode从发出的webpack命令中获取参数的值。

于 2018-08-20T11:29:10.037 回答