Skip to main content
Bun 会自动读取您的 .env 文件,并提供惯用的方式以编程方式读取和写入环境变量。您还可以使用 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 支持双引号、单引号和模板字面量反引号:
.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 将变量视为非可选字符串,请使用接口合并
将此声明添加到项目中的任何文件中。它会全局地将 AWESOME 属性添加到 process.envBun.env

配置 Bun

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

运行时转译器缓存

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

禁用运行时转译器缓存

要禁用运行时转译器缓存,请将 BUN_RUNTIME_TRANSPILER_CACHE_PATH 设置为空字符串或字符串 "0"

它缓存什么?

它缓存:
  • 大于 4 KB 的源文件的转译输出。
  • 文件转译输出的 sourcemap
缓存的文件使用 .pile 扩展名。