ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

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

如何把 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-lockfilepreset 不识别二进制的bun.lockb格式服务器入口位于以下路径之一server.{js,cjs,mjs,ts,cts,mts}src/server.{js,cjs,mjs,ts,cts,mts}在入口文件中模块加载时调用一次Bun.serve()Vercel 检测到这个调用后就会把进来的请求路由给它。Vercel 支持fetch、routes、error和websocket四个选项文档给出的示例是Bun.serve({ routes: { /health: () Response.json({ status: ok }), }, fetch() { return new Response(Hello from Bun on Vercel); }, });这样一个最小可部署的项目只需要四个文件package.json、bun.lock、server.ts和vercel.json。不需要api/目录也不需要任何路由配置。与本地运行相关的限制port和hostname只在本地运行时生效它们不配置线上端点routes中的 Unix sockets 和 HTML imports 在 Vercel 上不支持WebSocket 连接按 Vercel 自己的 WebSockets 文档中的 Bun 示例配置node:http和node: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 presetpreset 是全站请求都走这一个服务器。这种写法只依赖vercel.json里的bunVersion不使用 framework preset也不要求bun.lock。如果想让其他路径也进入这个服务器需要在vercel.json中追加路由重写route overrides每条重写必须写完整请求路径并包含/api/server前缀。部署把仓库连接到 Vercel或者直接用 Vercel CLI 部署。文档给出两种方式# 用 bunx 运行无需全局安装 bunx vercel login bunx vercel deploy或者全局安装 Vercel CLIbun i -g vercel vercel login vercel deploybun i -g vercel会把 Vercel CLI 安装到你的全局依赖中其余两条命令只是登录和执行部署副作用限于本地环境。验证运行时确实是 Bun部署完成后在服务器代码里打印process.versions.bunconsole.log(runtime, process.versions.bun);文档示例的输出是runtime 1.4.0上面的1.4.0是文档示例结果。实际输出取决于 Vercel 按bunVersion解析到的 patch 版本只要日志中出现你配置的那个 minor 系列如1.4.x的版本号就说明部署跑在 Bun 运行时上。限制与注意事项node:http、node:https的自动 source maps、字节码缓存和请求指标在 Vercel 的 Bun 运行时上不支持fetch的请求指标支持routes中不能使用 Unix sockets 和 HTML importsRouting 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),仅供参考
返回列表