For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt, and this page is available as Markdown at /zh/guide/advanced/env-vars.md.
close
  • 简体中文
  • 环境变量

    Rslib 支持在构建过程中向代码中注入环境变量或表达式,这对于区分运行环境、替换常量值等场景很有帮助。

    本章节将介绍如何在 Rslib 中使用环境变量。

    默认环境变量

    Rslib 会根据 format 配置指定的 产物格式,将源码中的环境变量保留在构建产物中,或在构建时将其替换为指定的值。具体行为如下:

    产物格式import.meta.env.*process.env.*
    esm保留保留
    cjsimport.meta.env 被替换为 undefined保留
    umd / iife替换
    mf替换
    Note

    保留在构建产物中的环境变量通常由下游构建工具替换,或由目标运行时解析;构建时被替换的环境变量则使用 Rsbuild 定义的默认值

    process.env.NODE_ENV

    默认情况下,Rslib 会自动设置 process.env.NODE_ENV 环境变量:

    上述默认值会设置到当前 Node.js 进程,但不会在所有产物中替换 process.env.NODE_ENV。如上表所示,ESM 和 CJS 产物会保留 process.env.NODE_ENV,其他格式则会在构建时进行替换。

    如果需要覆盖产物中的默认处理方式,例如关闭替换或自定义替换值,可以通过 tools.rspack 配置 Rspack 的 optimization.nodeEnv

    rslib.config.ts
    import { defineConfig } from '@rslib/core';
    
    export default defineConfig({
      tools: {
        rspack: {
          optimization: {
            nodeEnv: false,
          },
        },
      },
    });

    .env 文件

    Rslib CLI 默认加载项目根目录下的 .env 文件。你可以使用以下 CLI 选项调整加载行为:

    • --env-mode <mode>:加载对应的 .env.[mode] 文件。
    • --env-dir <dir>:指定 .env 文件所在的目录。
    • --no-env:禁用 .env 文件加载。

    加载后,所有环境变量都会添加到当前 Node.js 进程,因此可以在 rslib.config.* 中通过 process.env 访问。其中,默认只有以 PUBLIC_ 开头的变量会在构建时替换代码中的同名环境变量。

    有关 .env 文件支持的类型、加载顺序和覆盖规则,请参考 Rsbuild - .env 文件;有关 Public 变量的处理规则,请参考 Rsbuild - Public 变量

    使用 define

    如果需要在构建时将代码中的全局标识符替换为其他值或表达式,可以通过 source.define 显式定义。例如:

    rslib.config.ts
    import { defineConfig } from '@rslib/core';
    
    export default defineConfig({
      source: {
        define: {
          'import.meta.env.FOO': JSON.stringify('foo'),
          'process.env.BAR': JSON.stringify('bar'),
        },
      },
    });
    Tip
    • 显式定义的值优先于 Rslib 的默认处理,并会在所有产物格式中被替换。
    • source.define 的值是代码片段,因此字符串需要通过 JSON.stringify() 转换。
    • 请按需定义具体属性,避免替换整个 process.env 对象。

    关于环境变量的类型声明,请参考 Rsbuild - 类型声明