云计算与部署部署到 Vercel
部署到 Vercel
用 bunVersion 让 Vercel Functions 以 Bun 运行,并处理 Next.js 与边界差异
最后更新于
你将得到什么
Vercel Functions 的请求由 Bun 执行,而不是只拿 Bun 装依赖。适用于受支持的框架(含 Next.js)和 /api 下的独立 Function。
1. 开启 Bun runtime
{
"$schema": "https://openapi.vercel.sh/vercel.json",
"bunVersion": "1.x"
}1.x 是当前唯一合法值;小版本和补丁版本由 Vercel 托管。不要自行锁定小版本。
2. Next.js 的额外一步
使用 ISR 的 Next.js 项目必须把 dev / build 脚本交给 Bun 执行:
{
"scripts": {
"dev": "bun run --bun next dev",
"build": "bun run --bun next build"
}
}应用仍由 Next.js 自己的构建链(Turbopack/Webpack)打包;--bun 只改变执行命令的运行时。不使用 ISR 时按 Vercel 当前文档确认是否仍需此步。
3. 独立 Function
/api 目录下的 .ts 文件会按 TypeScript 直接编译运行:
export default {
async fetch(request: Request) {
const url = new URL(request.url);
const name = url.searchParams.get('name') || 'World';
return Response.json({ message: `Hello ${name}!` });
},
};与 Node runtime 的差异
- 没有自动 source map、字节码缓存,以及
node:http/node:https的请求指标;fetch指标两个运行时都可用。 - 支持大多数 Node.js API,但不是全部;Function 里不要启动
Bun.serve。 - Routing Middleware 在设置
bunVersion后与 Node runtime 行为一致,但 runtime 配置仍需写nodejs。
切换是可逆决策,也要实测
在预览部署上对比冷启动、p95、内存和错误率后再切生产;保留切回 Node runtime 只需删除 bunVersion。已有稳定 Node 工作负载不必为“统一”迁移。
验收
- 预览部署的 Function 日志确认 Bun 生效;
- 覆盖 SSR/ISR、流式响应、Server Function 和原生依赖路径;
- 错误栈可读性(无自动 source map)符合排障要求;
- 指标管线不依赖
node:http请求指标。