Skip to main content
Bun 会自动读取你的 .env 文件,并提供符合惯用方式的 API,以便以编程方式读取和写入环境变量。你还可以使用 Bun 特有的环境变量来配置 Bun 运行时行为的部分内容。

设置环境变量

Bun 会自动读取以下文件(按优先级升序排列)。
  • .env
  • .env.production, .env.development, .env.test(取决于 NODE_ENV 的值)
  • .env.local
.env
你也可以在命令行中设置变量。
如需跨平台解决方案,请使用 Bun Shell,例如通过 bun exec 使用。
在 Windows 上,通过 bun run 调用的 package.json 脚本会自动使用 Bun Shell,因此以下方式同样支持跨平台。
package.json
或者,通过为 process.env 设置属性,以编程方式设置变量。

手动指定 .env 文件

--env-file 标志会覆盖 Bun 加载的 .env 文件。无论是使用 bun 运行文件,还是运行 package.json 脚本,都可以使用该标志。

禁用自动加载 .env

使用 --no-env-file 可禁用 Bun 自动加载 .env 文件,例如在生产环境或 CI/CD 流程中,如果你希望完全依赖系统环境变量。
你也可以在 bunfig.toml 中禁用此功能:
bunfig.toml
即使禁用了默认加载,通过 --env-file 传入的文件仍会被加载。 当 Bun 以 node 的身份调用时(例如通过 bun --bunbunx --bun,或指向 Bun 的 node 符号链接),会禁用自动加载 .env,以匹配 Node.js 的行为。这样,使用自身且感知运行模式的 .env 解析机制的工具(例如 Vite 的 loadEnv)就能正确选择 .env.{mode} 文件,而不会将 Bun 预先填充的值视为由 shell 设置的覆盖值。显式传入的 --env-file 参数仍会生效。

引号

Bun 支持双引号、单引号和模板字符串反引号:
.env

扩展

Bun 会自动_扩展_环境变量,因此你可以引用之前定义的变量。
.env
这对于构造连接字符串或其他复合值非常有用。
.env
要禁用扩展,请使用反斜杠转义 $
.env

dotenv

Bun 会自动读取 .env 文件,因此无需使用 dotenvdotenv-expand

读取环境变量

process.env 读取当前环境变量。
Bun 也通过 Bun.envimport.meta.env 暴露这些变量,它们都是 process.env 的别名。
要打印当前设置的所有环境变量,请运行 bun --print process.env

TypeScript

在 TypeScript 中,process.env 的所有属性都被类型定义为 string | undefined
要获得自动补全,并告诉 TypeScript 将变量视为非可选字符串,请使用接口合并
将此声明添加到项目中的任意文件中。它会全局为 process.envBun.env 添加 AWESOME 属性。

配置 Bun

Bun 读取以下环境变量来配置其行为的各个方面。

运行时转译器缓存

对于大于 4 KB 的文件,Bun 会将转译后的输出缓存到 $BUN_RUNTIME_TRANSPILER_CACHE_PATH 或平台特定的缓存目录中。这可以让使用 Bun 的 CLI 加载得更快。 该缓存是全局的,并在所有项目之间共享;它采用内容寻址,因此不会包含重复条目。可以随时安全地删除缓存,即使 Bun 进程正在运行也不例外。 在使用 Docker 等临时文件系统时,请禁用此缓存。Bun 的 Docker 镜像会自动禁用它。

禁用运行时转译器缓存

要禁用该缓存,将 BUN_RUNTIME_TRANSPILER_CACHE_PATH 设置为空字符串或字符串 "0"

它缓存什么?

缓存内容包括:
  • 大于 4 KB 的源文件的转译输出。
  • 文件转译输出的源映射。
缓存文件使用 .pile 扩展名。