JavaScript 生态正快速演进,以满足现代 AI 驱动应用在性能和集成方面日益增长的需求。Bun 是开发者中颇受欢迎的框架,它把运行时、打包器和包管理器合而为一,被视为 Node.js 的"开箱即用"替代品。凭借比传统运行时更快的启动速度和更低的内存占用,Bun 成为 DigitalOcean 客户呼声最高的功能之一。
DigitalOcean 应用托管服务(App Platform)现已原生支持 Bun。现在,您无需编写任何配置即可直接从代码仓库部署 Bun 应用。应用托管服务(App Platform)的云原生 Buildpack 会自动检测、构建、部署并运行您的 Bun 应用。
主要优势
- 性能:Bun 是现代高性能 JavaScript 运行时,内置工具链,针对快速启动与高效执行做了优化。
- 零配置:无需维护 Dockerfile,只要把代码推送到 Git 仓库,剩下的运行时设置由我们完成。
- Next.js 无缝支持:Bun 与 Next.js 原生兼容,可同样轻松地部署全栈 React 应用。
应用托管服务中的三种部署路径
- **云原生 Buildpack("代码优先")**:连接 GitHub/GitLab/Bitbucket 仓库,我们自动分析代码、识别语言并完成构建。
- Dockerfile:在仓库中放置 Dockerfile,我们按您的指令构建镜像。
- 预构建镜像:本地构建容器镜像并推送到 DigitalOcean 容器注册表(DOCR),我们部署您推送的 exact 镜像。
如何开始使用 Bun
如果你刚接触 Bun,上手非常简单。Bun 被设计为 Node.js 的"即插即用"替代品,通常只需极少改动即可沿用现有代码和 package.json。
安装 Bun:在本地全局安装 Bun,即可快速完成环境搭建。
arduino
curl -fsSL https://bun.sh/install | bash
运行应用:使用 bun install 快速安装依赖(就像 Node.js 下的 npm install),再用 bun run 执行脚本即可。
arduino
bun install # 安装依赖,类似 npm install
bun run dev # 执行脚本,类似 npm run dev
深入的更多用法请参考 Bun 官方文档。
Bun 的自动检测机制
当你在本地初始化项目并确保运行正常后,应用托管服务(App Platform)会自动识别为 Bun 应用。构建系统通过扫描代码仓库根目录来判断所需运行环境。
如何识别 Bun 应用
只要在代码仓库中发现这个锁定文件,系统就会确认你正在使用 Bun:bun.lock
检测到 Bun 应用后,自动构建流程如下:
1、安装依赖:自动执行 bun install 安装依赖(如果 bun.lock 文件没变,系统会直接使用缓存的 node_modules,大幅缩短构建时间)
2、执行构建:运行 bun run build 进行构建。你也可以在 App Spec 里自定义 build_command 来覆盖这个步骤。如果需要在安装依赖前后执行其他操作,可以使用 package.json 里的 digitalocean-prebuild 和 digitalocean-postbuild 脚本
3、启动应用:默认通过 bun run start 启动应用
版本选择规则:
- 读取 BUN_VERSION 环境变量
- 读取 .bun-version 文件
- 读取 .runtime.bun.txt 文件
- 如果以上都没指定,就用 Bun GitHub Releases 的最新版本
系统会缓存你使用的 Bun 和 Node 版本,只要版本不变,后续构建都会更快。只有当你主动修改版本时,系统才会重新获取。
从 Node.js 迁移到 Bun
如果你想将现有的 Node.js 应用转为使用 Bun 运行时,过程其实很简单。不需要修改应用代码,只需调整项目配置。
第一步:清理 Node 配置文件 删除项目中的 package-lock.json(或 yarn.lock)。这个操作相当于告诉应用托管服务(App Platform):"不要再把这个应用当成标准 Node 应用来处理了。"
第二步:生成 Bun 配置文件 在本地运行 bun install。这会自动生成 bun.lock 文件。
第三步:提交更新
将改动提交到代码仓库。应用托管服务(App Platform)检测到新提交后,就会自动切换------不再使用 Node 构建流程,转而使用 Bun 的构建流程。
仅把 Bun 当包管理器
如果你想用 Bun 作为包管理器,但继续使用 Node.js 作为运行时,系统会在以下情况自动安装 Node.js:
如果在 package.json 中将 Bun 指定为包管理器。请按如下方式更新你的 package.json:
perl
{
"packageManager": "bun@1.2.0"
}
如果 package.json 中有脚本包含 node 命令,比如下面这样:
json
{
"scripts": {
"start": "node src/index.js"
}
}
如果将 Bun 用作包管理器,默认会安装并使用 Node.js v22.x 版本。如需指定 Node.js 版本,可以在 package.json 的 engines 字段中定义,例如:
json
{
"engines": {
"node": "23.x"
}
}
Next.js 配置
使用 Bun 运行时也能在应用托管服务(App Platform)上部署 Next.js 应用。如果你要部署 Next.js 项目(包括使用了 ISR 的项目),必须更新脚本配置,明确指定在构建和开发流程中使用 Bun 运行时。
请按以下方式更新 package.json:
json
{
"scripts": {
"dev": "bun --bun next dev", //or remove this line, as app platform uses the build script
"build": "bun --bun next build"
}
}
这样可以确保 Next.js 在 应用托管服务(App Platform) 的构建过程中正确调用 Bun 的运行时功能。
DigitalOcean 应用托管服务(App Platform)现已在全球所有区域提供原生 Bun 支持。
- 新建应用:关联包含 bun.lockb 的 GitHub 仓库即可。
- 现有应用:切换包管理器并推送,触发新构建即可自动使用 Bun。
更多高级配置请参考 DigitalOcean 英文官网 Bun Buildpack 文档: