CC 4.0 授權

本節內容衍生自以下連結的內容,並受 CC BY 4.0 授權約束。

以下內容若無特別說明,可視為基於原始內容進行修改和刪除的結果。

EnvironmentPlugin

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

選項

  • 類型: string[] | Record<string, string>

範例

基本使用案例

EnvironmentPlugin 接受鍵的陣列或將鍵對應到其預設值的物件。

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

這等效於以下的 DefinePlugin 應用

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

未指定環境變數會引發「EnvironmentPlugin - ${key} 環境變數未定義」的錯誤。

使用預設值

或者,EnvironmentPlugin 支援物件,將鍵對應到其預設值。如果 process.env 中未定義鍵,則採用該鍵的預設值。

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

來自 process.env 的變數始終是字串。

提示

DefinePlugin 不同,預設值由 EnvironmentPlugin 應用於 JSON.stringify

提示

nullundefined 的預設值行為不同。對於必須在捆綁期間提供的變數,請使用 undefined,如果它們是可選的,則使用 null

警告

如果在捆綁期間找不到環境變數且未提供預設值,Rspack 將會拋出錯誤,而不是警告。

讓我們研究一下在測試檔案 entry.js 上執行先前的 EnvironmentPlugin 配置時的結果

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

當在終端機中執行 NODE_ENV=production Rspack 以進行建置時,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 Rspack 會產生

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

Git 版本

以下 EnvironmentPlugin 配置提供了對應於儲存庫最後一次 Git 提交的 process.env.GIT_VERSION(例如「v5.4.0-2-g25139f57f」)和 process.env.GIT_AUTHOR_DATE(例如「2020-11-04T12:25:16+01:00」)

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

new rspack.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)
});