Bun 自动读取你的 .env
文件,并提供以惯用方式以编程方式读取和写入环境变量的方法。此外,Bun 的一些运行时行为可以通过 Bun 特定的环境变量进行配置。
设置环境变量
Bun 自动读取以下文件(按优先级递增列出)。
.env
.env.production
、.env.development
、.env.test
(取决于NODE_ENV
的值).env.local
FOO=hello
BAR=world
变量也可以通过命令行设置。
FOO=helloworld bun run dev
或者通过将属性分配给 process.env
以编程方式设置。
process.env.FOO = "hello";
手动指定 .env
文件
Bun 支持 --env-file
来覆盖要加载的特定 .env
文件。你可以在 Bun 的运行时中运行脚本或运行 package.json 脚本时使用 --env-file
。
bun --env-file=.env.1 src/index.ts
bun --env-file=.env.abc --env-file=.env.def run build
引号
Bun 支持双引号、单引号和模板文字反引号
FOO='hello'
FOO="hello"
FOO=`hello`
扩展
环境变量会自动扩展。这意味着你可以在环境变量中引用先前定义的变量。
FOO=world
BAR=hello$FOO
process.env.BAR; // => "helloworld"
这对于构建连接字符串或其他复合值很有用。
DB_USER=postgres
DB_PASSWORD=secret
DB_HOST=localhost
DB_PORT=5432
DB_URL=postgres://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME
可以通过使用反斜杠转义 $
来禁用此功能。
FOO=world
BAR=hello\$FOO
process.env.BAR; // => "hello$FOO"
dotenv
一般来说,你不再需要 dotenv
或 dotenv-expand
,因为 Bun 会自动读取 .env
文件。
读取环境变量
可以通过 process.env
访问当前的环境变量。
process.env.API_TOKEN; // => "secret"
Bun 还通过 Bun.env
和 import.meta.env
公开了这些变量,它们是 process.env
的简单别名。
Bun.env.API_TOKEN; // => "secret"
import.meta.env.API_TOKEN; // => "secret"
若要将所有当前设置的环境变量打印到命令行,请运行 bun --print process.env
。这对于调试很有用。
bun --print process.env
BAZ=stuff
FOOBAR=aaaaaa
<lots more lines>
TypeScript
在 TypeScript 中,process.env
的所有属性都以 string | undefined
形式输入。
Bun.env.whatever;
// string | undefined
若要获取自动补全并告诉 TypeScript 将变量视为非可选字符串,我们将使用 接口合并。
declare module "bun" {
interface Env {
AWESOME: string;
}
}
将此行添加到项目中的任何文件。它将在全局范围内将 AWESOME
属性添加到 process.env
和 Bun.env
。
process.env.AWESOME; // => string
配置 Bun
Bun 会读取这些环境变量并配置其行为的各个方面。
名称 | 说明 |
---|---|
BUN_RUNTIME_TRANSPILER_CACHE_PATH | 运行时转换器会缓存大于 50 kb 的源文件转换后的输出。这会让使用 Bun 的 CLI 加载得更快。如果设置了 BUN_RUNTIME_TRANSPILER_CACHE_PATH ,则运行时转换器会将转换后的输出缓存到指定的目录。如果将 BUN_RUNTIME_TRANSPILER_CACHE_PATH 设置为空字符串或字符串 "0" ,则运行时转换器不会缓存转换后的输出。如果未设置 BUN_RUNTIME_TRANSPILER_CACHE_PATH ,则运行时转换器会将转换后的输出缓存到特定于平台的缓存目录。 |
TMPDIR | Bun 有时需要一个目录来存储打包或其他操作期间的中间资产。如果未设置,则默认为特定于平台的临时目录:Linux 上的 /tmp ,macOS 上的 /private/tmp 。 |
NO_COLOR | 如果 NO_COLOR=1 ,则 禁用 ANSI 彩色输出。 |
FORCE_COLOR | 如果 FORCE_COLOR=1 ,则强制启用 ANSI 彩色输出,即使设置了 NO_COLOR 。 |
BUN_CONFIG_MAX_HTTP_REQUESTS | 控制由 fetch 和 bun install 发送的并发 HTTP 请求的最大数量。默认为 256 。如果你遇到速率限制或连接问题,可以减少此数量。 |
BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOAD | 如果 BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOAD=1 ,则 bun --watch 在重新加载时不会清除控制台 |
DO_NOT_TRACK | 截至 2023 年 11 月 28 日,尚未发送遥测,但我们计划在未来几个月内添加遥测。如果 DO_NOT_TRACK=1 ,则 禁用 分析。Bun 记录包时间(以便我们用数据回答,“Bun 变得更快了吗?”)和功能使用(例如,“人们真的在使用宏吗?”)。请求正文大小约为 60 字节,因此数据量不大。相当于 bunfig 中的 telemetry=false 。 |
运行时转换器缓存
对于大于 50 KB 的文件,Bun 将转换后的输出缓存到 $BUN_RUNTIME_TRANSPILER_CACHE_PATH
或特定于平台的缓存目录。这使得使用 Bun 的 CLI 加载速度更快。
此转换器缓存是全局的,并在所有项目中共享。随时删除缓存是安全的。它是一个内容可寻址缓存,因此它永远不会包含重复的条目。在 Bun 进程运行时删除缓存也是安全的。
在使用 Docker 等临时文件系统时,建议禁用此缓存。Bun 的 Docker 镜像会自动禁用此缓存。
禁用运行时转换器缓存
要禁用运行时转换器缓存,请将 BUN_RUNTIME_TRANSPILER_CACHE_PATH
设置为空字符串或字符串 "0"
。
BUN_RUNTIME_TRANSPILER_CACHE_PATH=0 bun run dev
它缓存什么?
它缓存
- 大于 50 KB 的源文件转换输出。
- 文件的转换输出的源映射
文件扩展名 .pile
用于这些缓存文件。