EnvironmentPlugin

EnvironmentPlugin 是一个通过 DefinePlugin 来设置 process.env 环境变量的快捷方式。

用法

EnvironmentPlugin 可以接收键数组或将键映射到其默认值的对象。(译者注:键是指要设定的环境变量名)

  1. new webpack.EnvironmentPlugin(['NODE_ENV', 'DEBUG']);

上面的写法和下面这样使用 DefinePlugin 的效果相同:

  1. new webpack.DefinePlugin({
  2. 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
  3. 'process.env.DEBUG': JSON.stringify(process.env.DEBUG)
  4. });

使用不存在的环境变量会导致一个 “EnvironmentPlugin - ${key} environment variable is undefined” 错误。

带默认值使用

或者,EnvironmentPlugin 也可以接收一个指定相应默认值的对象,如果在 process.env 中对应的环境变量不存在时将使用指定的默认值。

  1. new webpack.EnvironmentPlugin({
  2. NODE_ENV: 'development', // 除非有定义 process.env.NODE_ENV,否则就使用 'development'
  3. DEBUG: false
  4. });

process.env 中取到的值类型均为字符串。

不同于 DefinePlugin,默认值将被 EnvironmentPlugin 执行 JSON.stringify

如果要指定一个未设定的默认值,使用 null 来代替 undefined

示例:

让我们看一下对下面这个用来试验的文件 entry.js 执行前面配置的 EnvironmentPlugin 的结果:

  1. if (process.env.NODE_ENV === 'production') {
  2. console.log('Welcome to production');
  3. }
  4. if (process.env.DEBUG) {
  5. console.log('Debugging output');
  6. }

当在终端执行 NODE_ENV=production webpack 来构建时,entry.js 变成了这样:

  1. if ('production' === 'production') { // <-- NODE_ENV 的 'production' 被带过来了
  2. console.log('Welcome to production');
  3. }
  4. if (false) { // <-- 使用了默认值
  5. console.log('Debugging output');
  6. }

执行 DEBUG=false webpack 则会生成:

  1. if ('development' === 'production') { // <-- 使用了默认值
  2. console.log('Welcome to production');
  3. }
  4. if ('false') { // <-- DEBUG 的 'false' 被带过来了
  5. console.log('Debugging output');
  6. }

DotenvPlugin

The third-party DotenvPlugin (dotenv-webpack) allows you to expose (a subset of) dotenv variables:

  1. // .env
  2. DB_HOST=127.0.0.1
  3. DB_PASS=foobar
  4. S3_API=mysecretkey
  1. new Dotenv({
  2. path: './.env', // Path to .env file (this is the default)
  3. safe: true // load .env.example (defaults to "false" which does not use dotenv-safe)
  4. });

贡献人员

byzyk byzyk einarlove einarlove rouzbeh84 rouzbeh84 simon04 simon04