Skip to main content

Dotenvx和Bun的一些整合样例

· 2 min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

Bun 1.3发布啦,特性太大啦,有点目不暇接,不要TLDR,有精力的同学还是可以看看的,吃不了亏,上不了当。

Bun有对环境变量和.env文件的默认支持,详细请参考Bun Environment variables 借助这些环境变量,Bun可以快速完成诸如数据库连接、Redis连接、S3连接等操作,非常简单。 如在.env中中添加以下配置,Bun就会完成默认的数据库连接:

MYSQL_URL="mysql://root:this_is_long_password@localhost:3306/test"

但是保存在.env文件中的敏感信息都是明文的,这样就会有泄露风险,那么如何结合Dotenvx来保护这些敏感信息呢?

借助dotenvx的软连接特性,执行dotenvx link bin/bun,这样就会创建一个软连接 ,然后执行./bin/bun demo.ts, 就会自动加载.env文件,然后再执行demo.ts文件。

当然你可以可以创建一个bunw名称的脚本,由该脚本负责调用dotenvx加载.env文件,然后再执行bun命令也是没有问题的,样例脚本如下:

#!/bin/bash

# load .env by dotenvx
eval $( dotenvx decrypt --stdout --format shell )
# Execute bun command with arguments
exec $HOME/.bun/bin/bun "$@"
#exec $HOME/.deno/bin/deno "$@"

借助软连接和wrapper脚本,你可以非常方便地集成dotenvx的.env配置,这样我们在Bun中就可以安全地使用.env文件中的敏感信息, 如数据库、Redis、S3等信息,当然如果涉及到外包调用,各种API Key也都可以加密保存到.env文件中。

此外Bun还支持通过环境变量BUN_INSPECT_PRELOAD来指定预加载的脚本文件,该脚本文件会在Bun启动时自动加载,这个和--preload参数的功能是一致的, 如果在某一项目中,想要统一加载某个脚本文件,这样在.env文件中添加一下BUN_INSPECT_PRELOAD配置即可。