EnvironmentPlugin

2023-06-02 14:51 更新

?EnvironmentPlugin? 是在 ?process.env? 鍵上使用 ?DefinePlugin? 的簡寫。

Usage

?EnvironmentPlugin? 接受鍵數(shù)組或?qū)⑵滏I映射到默認值的對象。

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

這等效于以下 ?DefinePlugin? 應用程序:

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

Usage with default values

?EnvironmentPlugin? 支持一個對象,它將鍵映射到它們的默認值。如果在 ?process.env? 中未定義鍵,則采用鍵的默認值。

new webpack.EnvironmentPlugin({
  NODE_ENV: 'development', // use 'development' unless process.env.NODE_ENV is defined
  DEBUG: false,
});

例子:

讓我們調(diào)查一下在測試文件 ?entry.js? 上運行之前的 ?EnvironmentPlugin? 配置時的結(jié)果:

if (process.env.NODE_ENV === 'production') {
  console.log('Welcome to production');
}
if (process.env.DEBUG) {
  console.log('Debugging output');
}

在終端執(zhí)行 ?NODE_ENV=production webpack? 構(gòu)建時,?entry.js? 變成這樣:

if ('production' === 'production') {
  // <-- 'production' from NODE_ENV is taken
  console.log('Welcome to production');
}
if (false) {
  // <-- default value is taken
  console.log('Debugging output');
}

運行 ?DEBUG=false webpack? 產(chǎn)生:

if ('development' === 'production') {
  // <-- default value is taken
  console.log('Welcome to production');
}
if ('false') {
  // <-- 'false' from DEBUG is taken
  console.log('Debugging output');
}

Use Case: Git Version

下面的 ?EnvironmentPlugin? 配置提供?process.env.GIT_VERSION?(如“v5.4.0-2-g25139f57f”)和 ?process.env.GIT_AUTHOR_DATE?(如“2020-11-04T12:25:16+01:00”)對應存儲庫的最后一次 Git 提交:

const child_process = require('child_process');
function git(command) {
  return child_process.execSync(`git ${command}`, { encoding: 'utf8' }).trim();
}

new webpack.EnvironmentPlugin({
  GIT_VERSION: git('describe --always'),
  GIT_AUTHOR_DATE: git('log -1 --format=%aI'),
});

DotenvPlugin

第三方 ?DotenvPlugin? (?dotenv-webpack?) 允許您公開(一部分)dotenv 變量:

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


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號