加速 JavaScript 开发:DigitalOcean 应用托管现已原生支持 Bun

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 应用。

应用托管服务中的三种部署路径

  1. **云原生 Buildpack("代码优先")**:连接 GitHub/GitLab/Bitbucket 仓库,我们自动分析代码、识别语言并完成构建。
  2. Dockerfile:在仓库中放置 Dockerfile,我们按您的指令构建镜像。
  3. 预构建镜像:本地构建容器镜像并推送到 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/buildpacks/bun

相关推荐
橙子家1 小时前
浏览器缓存之【基础键值存储】:Local storage 和 Session storage
前端
星星在线3 小时前
MusicFree:一个「All in One」的个人音乐服务器,让听歌回归简单
前端·后端
IT_陈寒4 小时前
Redis的SETNX并发问题让我加了三天班
前端·人工智能·后端
demo007x4 小时前
Docling 文档转换以及技术架构分析
前端·后端·程序员
京东云开发者5 小时前
京东市民服务又“上新”!这次是黑龙江“龙易办”
前端
袋鱼不重6 小时前
我的神奇同事,AI 用多了居然写了个 Open In Codex
前端·后端·ai编程
竹林8186 小时前
Web3表单签名验证:我用 wagmi 和 ethers 给 DApp 加了一个“免密登录”,踩坑记录全在这了
javascript
用户6990304848756 小时前
try catch使用场景 处理同步代码错误兼容用的
javascript·uni-app
LDR0066 小时前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术6 小时前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript