news 2026/9/13 3:15:37

如何把 Bun.serve() 应用部署到 Vercel 并配置 bunVersion

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何把 Bun.serve() 应用部署到 Vercel 并配置 bunVersion

如何把 Bun.serve() 应用部署到 Vercel 并配置 bunVersion

【免费下载链接】bunIncredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one项目地址: https://gitcode.com/GitHub_Trending/bu/bun

如果你的项目核心是一个Bun.serve()HTTP 服务器(例如通过 routes 和 fetch 处理请求),想把它原样部署到 Vercel 而不是套一层框架,需要完成三件事:在vercel.json中通过bunVersion字段指定 Bun 运行时版本、让 Vercel 的 Bun framework preset 能发现你的服务器入口、然后用 Vercel CLI 完成部署并验证运行时。整个过程的前提是项目使用 Bun 管理依赖(有bun.lock文本锁文件),服务器在模块加载时调用一次Bun.serve()

在 vercel.json 中配置 bunVersion

要让 Vercel 的 Functions 跑在 Bun 运行时上,需要在项目根目录的vercel.json中添加bunVersion字段:

{ "bunVersion": "1.4.x" }

文档示例中使用的是1.4.x。这里写的是 minor 版本,patch 版本由 Vercel 管理。为了让本地行为和线上一致,建议把本地安装的 Bun 版本调到与 Vercel 使用的版本一致。

注意 TanStack Start 的生态文档中给出的vercel.json写法是"bunVersion": "1.x",写法风格与上面一致,按项目实际选用的 minor 版本填写即可。

用 Bun.serve() 承载整个应用

Vercel 的 Bun framework preset 会把部署内的所有请求转发到同一个Bun.serve()服务器。preset 生效需要同时满足三个条件:

  • 项目设置了bunVersion(上一步的vercel.json);
  • 项目中有bun.lock文件(Bun 1.2 及以上版本运行bun install会自动生成;更早版本需要运行bun install --save-text-lockfile,preset 不识别二进制的bun.lockb格式);
  • 服务器入口位于以下路径之一:
    • server.{js,cjs,mjs,ts,cts,mts}
    • src/server.{js,cjs,mjs,ts,cts,mts}

在入口文件中,模块加载时调用一次Bun.serve(),Vercel 检测到这个调用后就会把进来的请求路由给它。Vercel 支持fetchrouteserrorwebsocket四个选项,文档给出的示例是:

Bun.serve({ routes: { "/health": () => Response.json({ status: "ok" }), }, fetch() { return new Response("Hello from Bun on Vercel"); }, });

这样一个最小可部署的项目只需要四个文件:package.jsonbun.lockserver.tsvercel.json。不需要api/目录,也不需要任何路由配置。

与本地运行相关的限制:

  • porthostname只在本地运行时生效,它们不配置线上端点;
  • routes中的 Unix sockets 和 HTML imports 在 Vercel 上不支持;
  • WebSocket 连接按 Vercel 自己的 WebSockets 文档中的 Bun 示例配置;
  • node:httpnode:https的自动 source maps、字节码缓存、请求指标在 Bun 运行时上不受支持(fetch的请求指标支持)。

可选分支:把 Bun.serve() 挂在 /api 下

如果项目已经有前端、只想给部分路径加一个 Bun 服务器,可以创建api/server.ts并在模块加载时调用一次Bun.serve()

Bun.serve({ fetch(request) { const url = new URL(request.url); return Response.json({ message: "Hello from Bun on Vercel", pathname: url.pathname, }); }, });

Vercel 会把它部署成位于/api/server的单个 Function,只有请求/api/server才会到达这个服务器(区别于上面的 framework preset,preset 是全站请求都走这一个服务器)。这种写法只依赖vercel.json里的bunVersion,不使用 framework preset,也不要求bun.lock。如果想让其他路径也进入这个服务器,需要在vercel.json中追加路由重写(route overrides),每条重写必须写完整请求路径并包含/api/server前缀。

部署

把仓库连接到 Vercel,或者直接用 Vercel CLI 部署。文档给出两种方式:

# 用 bunx 运行,无需全局安装 bunx vercel login bunx vercel deploy

或者全局安装 Vercel CLI:

bun i -g vercel vercel login vercel deploy

bun i -g vercel会把 Vercel CLI 安装到你的全局依赖中,其余两条命令只是登录和执行部署,副作用限于本地环境。

验证运行时确实是 Bun

部署完成后,在服务器代码里打印process.versions.bun

console.log("runtime", process.versions.bun);

文档示例的输出是:

runtime 1.4.0

上面的1.4.0是文档示例结果。实际输出取决于 Vercel 按bunVersion解析到的 patch 版本,只要日志中出现你配置的那个 minor 系列(如1.4.x)的版本号,就说明部署跑在 Bun 运行时上。

限制与注意事项

  • node:httpnode:https的自动 source maps、字节码缓存和请求指标在 Vercel 的 Bun 运行时上不支持,fetch的请求指标支持;
  • routes中不能使用 Unix sockets 和 HTML imports;
  • Routing Middleware 需要用 Node.js 运行时运行,在 middleware 文件中导出:
export const config = { runtime: "nodejs" };
  • 如果项目是 Next.js 等 Vercel 支持的框架而非裸Bun.serve()应用,设置bunVersion后框架即可跑在 Bun 上;Next.js 项目(包括 ISR)还需要把package.json的 scripts 改成用bun --bun调用 Next CLI:
{ "scripts": { "dev": "bun --bun next dev", "build": "bun --bun next build" } }

--bun标志让 Next.js CLI 在 Bun 下运行,打包(Turbopack 或 Webpack)本身不受影响。此分支与本文的Bun.serve()部署路径相互独立,仅在框架项目参考时有用。

完整流程参考 部署到 Vercel 的官方文档,服务器配置细节见 Bun.serve() 文档与 路由文档。

【免费下载链接】bunIncredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one项目地址: https://gitcode.com/GitHub_Trending/bu/bun

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 3:15:25

一文讲透JSON序列化与反序列化:数据交换、持久化与安全实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 3:07:11

提示词工程实战:10个技巧与模板,让大模型输出更精准

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 3:05:47

企业AI项目落地指南:从立项到上线的关键要素与避坑总结

前阵子一位做制造业的朋友拉我聊一个AI质检项目,聊到一半他开始抱怨:“模型效果挺好的,demo也通过了,怎么一到上线就各种幺蛾子?”这个问题我听过太多次。企业里的AI项目,真正死在模型精度上的其实不多&…

作者头像 李华
网站建设 2026/9/13 3:03:10

论文写作效率提升指南:6款工具组合使用全攻略

写论文这事,真正让人崩溃的从来不是“写”这个动作,而是写之前被文献淹没、写的时候被格式折腾、写完还要被语言和错别字反复折磨。我读研那几年,光是调整参考文献格式就熬过好几个通宵,后来痛定思痛,把市面上叫得上名…

作者头像 李华