CC 4.0 许可证

本节内容源自以下链接的内容,并受 CC BY 4.0 许可证约束。

除非另有说明,以下内容可被视为基于原始内容进行修改和删除的结果。

EnvironmentPlugin

EnvironmentPlugin 是使用 DefinePluginprocess.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)
});