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,即可快速完成環境搭建。
curl -fsSL https://bun.sh/install | bash
運行應用:使用 bun install 快速安裝依賴(就像 Node.js 下的 npm install),再用 bun run 執行腳本即可。
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:
{
"packageManager": "bun@1.2.0"
}
如果 package.json 中有腳本包含 node 命令,比如下面這樣:
{
"scripts": {
"start": "node src/index.js"
}
}
如果將 Bun 用作包管理器,默認會安裝並使用 Node.js v22.x 版本。如需指定 Node.js 版本,可以在 package.json 的 engines 字段中定義,例如:
{
"engines": {
"node": "23.x"
}
}
Next.js 配置
使用 Bun 運行時也能在應用託管服務(App Platform)上部署 Next.js 應用。如果你要部署 Next.js 項目(包括使用了 ISR 的項目),必須更新腳本配置,明確指定在構建和開發流程中使用 Bun 運行時。
請按以下方式更新 package.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 文檔:
https://docs.digitalocean.com/products/app-platform/reference...