Vercel Functions
与 Web 框架和 Vercel 部署流程深度集成的托管 Serverless 计算服务。
项目概述
Vercel Functions 将 API 路由、服务端渲染和后台处理构建为自动扩缩的云函数,支持 Node.js、Bun、Python、Rust、Go、Ruby、WebAssembly 与 Edge 等运行时。
Vercel Functions 是 Vercel 应用平台中的托管计算能力。开发者可以直接创建 api 目录函数,或使用 Next.js、SvelteKit、Nuxt、Astro、Express、Hono 等框架的服务端入口;Vercel 在构建时分析依赖、生成函数产物,并通过 CDN 和区域路由接收请求。当前主力 Node.js 与 Python Functions 可使用 Fluid compute,让一个实例并发处理多个调用、动态扩缩、减少冷启动,并通过 waitUntil 在响应之后继续执行受生命周期约束的后台工作。平台还支持流式响应、Cron、环境变量、OIDC、运行日志、Tracing、区域和故障转移配置。Vercel 的 CLI、Builders、Runtime 包和 @vercel/functions 采用 Apache-2.0 等开源许可证,但托管调度、全球网络、控制面与 Fluid compute 服务并不是可下载后完整自托管的开源产品。
主要特点
Vercel Functions 把框架路由、构建分析、运行时、自动扩缩、发布预览和可观测性整合到同一条应用交付链路。
框架原生函数构建
可直接使用 api 目录,也能从 Next.js Route Handler、SSR 页面以及多种全栈框架自动生成函数,无需逐个维护基础设施模板。
Fluid compute
Node.js 与 Python 等运行时可让多个调用共享一个实例并发执行,平台优先利用已有资源后再扩容,以降低空闲和冷启动成本。
多语言与多运行时
官方运行时覆盖 Node.js、Bun、Python、Rust、Go、Ruby、WebAssembly 与 Edge,并允许通过 Runtime API 和 Build Output API 扩展。
完整 Node.js 与 Web API
Node.js Functions 可使用 Node 核心模块、原生依赖和 npm 生态,也支持 Request、Response、Fetch、Streams 等标准 Web API。
流式响应与后台收尾
可持续向客户端发送生成内容或增量数据,并通过 waitUntil 或 Next.js after 在响应后执行日志、分析与非关键副作用。
区域、扩缩与故障转移
函数按区域优先运行并自动扩缩,可将计算部署在靠近数据库的位置;特定套餐支持多区域和自定义故障转移。
Cron 与平台集成
Cron Job 可以按计划调用函数,函数还能使用 Vercel Storage、Edge Config、环境变量、OIDC 和 Marketplace 集成。
日志、指标与 Tracing
Dashboard 提供运行日志、调用、错误率、执行时长和外部请求视图,并可通过 OpenTelemetry、Log Drain 与 Trace Drain 接入监控系统。
适用场景
适合已经部署在 Vercel 的全栈 Web 产品、API、Webhook、AI 流式接口和轻量后台任务,尤其适合重视框架集成与预览环境的团队。
Next.js 全栈应用
Route Handler、Server Action、服务端渲染和动态数据请求可与前端部署一起构建、预览和发布。
Web API 与 BFF
为浏览器或移动端提供认证、数据聚合、表单处理和第三方服务代理,并复用完整 Node.js 生态。
AI 流式接口
通过 Web Streams 逐步返回模型 Token、工具调用或生成进度,减少用户等待完整结果的感知延迟。
Webhook 接收器
处理支付、代码托管、CMS 和 SaaS Webhook,快速响应后再执行日志或非关键后处理。
定时任务
用 Cron 调用函数完成报告、缓存刷新、数据同步和健康检查;重要任务仍应自行实现鉴权、幂等和失败恢复。
多框架服务端部署
Express、Fastify、NestJS、Hono、H3、Elysia、Koa 等应用可通过官方适配器或框架构建输出部署为 Functions。
优点与注意事项
技术选型不仅要看能力,也要理解它带来的团队成本。
主要优点
Vercel Functions 擅长的地方
- 函数与前端、框架路由、预览部署、环境变量和域名处于同一工作流
- 常见框架可以自动生成函数,无需为每个 API 手工编写云资源模板
- Node.js 运行时提供完整 API 和广泛 npm 兼容性,迁移现有服务相对直接
- Fluid compute 的并发复用、动态扩缩和预热可以减少传统 Serverless 的资源浪费
- 流式响应、后台收尾、Cron、日志和 Tracing 覆盖常见应用计算需求
- 开源 CLI、Builders、Runtime 包和 Build Output API 提供可检查的构建与框架集成边界
需要注意
采用前应考虑的问题
Apache-2.0 主要覆盖 Vercel CLI、构建工具和相关包,不能据此完整复制 Vercel 的调度、Fluid compute、网络与控制面。
内存、持续时间、Bundle、请求体、文件描述符、区域数和每次部署函数数都受运行时与套餐限制,应以当前官方限制为准。
部署文件系统只读,/tmp 仅适合有限的临时数据;需要持久化的文件、队列和状态应放在外部存储或数据库。
多个请求可能共享进程和模块级资源。全局连接池可以复用,但用户身份、请求缓存和可变业务状态不能泄漏到其他请求。
函数靠近用户并不代表靠近单区域数据库。频繁跨区域查询会增加延迟和出口成本,应优先让计算靠近主要数据源。
它适合日志和非关键收尾工作,但仍受函数生命周期和最大时长约束;要求保证执行、重试和长流程时应使用队列或工作流。
Fluid compute 分别计算 Active CPU、Provisioned Memory 和调用次数。I/O 等待可暂停 CPU 计费,但内存会持续占用。
Route 配置、Edge Config、存储、OIDC 和 Vercel 专用 API 使用越深,迁移到其他平台所需的适配工作越多。
快速开始
创建 Next.js App Router 项目,加入类型安全的 Route Handler、后台收尾任务和流式接口,再使用 Vercel CLI同步本地环境。
bashnpx create-next-app@latest vercel-functions-demo
cd vercel-functions-demo
npm install @vercel/functionstypescript// app/api/hello/route.ts
export async function GET(request: Request) {
const url = new URL(request.url);
const name = url.searchParams.get("name")?.trim() || "World";
return Response.json(
{
message: `Hello, ${name}!`,
runtime: "Vercel Functions",
},
{
headers: {
"cache-control": "no-store",
},
},
);
}typescript// app/api/tasks/route.ts
type TaskInput = {
title?: unknown;
};
export async function POST(request: Request) {
const body = (await request.json()) as TaskInput;
if (typeof body.title !== "string" || body.title.trim() === "") {
return Response.json(
{ error: "title is required" },
{ status: 400 },
);
}
return Response.json(
{
id: crypto.randomUUID(),
title: body.title.trim(),
},
{ status: 201 },
);
}typescript// api/audit.ts
import { waitUntil } from "@vercel/functions";
async function writeAuditLog(requestId: string) {
await fetch(process.env.AUDIT_ENDPOINT!, {
method: "POST",
headers: {
"content-type": "application/json",
authorization: `Bearer ${process.env.AUDIT_TOKEN}`,
},
body: JSON.stringify({ requestId }),
});
}
export default {
fetch() {
const requestId = crypto.randomUUID();
waitUntil(writeAuditLog(requestId));
return Response.json({ accepted: true, requestId });
},
};typescript// app/api/stream/route.ts
export async function GET() {
const encoder = new TextEncoder();
const stream = new ReadableStream({
async start(controller) {
for (const message of ["分析请求", "读取数据", "生成结果"]) {
controller.enqueue(
encoder.encode(`data: ${JSON.stringify({ message })}\n\n`),
);
await new Promise((resolve) => setTimeout(resolve, 250));
}
controller.close();
},
});
return new Response(stream, {
headers: {
"content-type": "text/event-stream; charset=utf-8",
"cache-control": "no-cache",
},
});
}typescript// app/api/report/route.ts
export const maxDuration = 60;
export const preferredRegion = ["hnd1", "sin1"];
export async function GET() {
const report = await generateReport();
return Response.json(report);
}
async function generateReport() {
return {
generatedAt: new Date().toISOString(),
status: "ready",
};
}bashnpx vercel link
npx vercel env pull .env.local
npm run dev
curl "http://localhost:3000/api/hello?name=Ada"
curl -X POST "http://localhost:3000/api/tasks" -H "content-type: application/json" --data '{"title":"Review function logs"}'下一步:函数实例可能复用并并发处理多个请求,不能把用户或请求状态放在可变全局变量中。数据库连接应复用受控连接池并放在与函数接近的区域;需要保证投递、长时间运行或复杂重试的任务应交给队列或工作流,而不是只依赖 waitUntil。
类似项目
这些项目覆盖相邻的边缘计算、JavaScript 运行时和全栈框架能力,但执行位置、运行模型、基础设施控制和平台绑定程度不同。
Netlify Functions
与 Netlify Web 部署、预览和平台事件紧密集成的托管 Serverless Functions。
查看项目Cloudflare Workers
在 Cloudflare 全球网络上构建、部署和扩展应用的 Serverless 计算平台。
查看项目Next.js
基于 React 的全栈 Web 框架,覆盖渲染、路由和部署。
查看项目Node.js
基于 V8、用于服务器、命令行工具和网络应用的跨平台 JavaScript 运行时。
查看项目Drizzle ORM
轻量、类型安全且贴近 SQL 的 TypeScript ORM,原生连接主流数据库驱动,并配套迁移工具。
查看项目AWS Lambda
AWS 的事件驱动 Serverless 计算服务,拥有广泛的云服务、网络和事件源集成。
访问官网Vercel Functions vs Cloudflare Workers
Vercel Functions 和 Cloudflare Workers 都能把 Web 应用与 API 交给托管平台自动扩缩,但默认模型不同。Vercel Functions 以框架集成、区域优先计算和完整 Node.js 为核心;Cloudflare Workers 以全球网络、V8 Isolate、Web 标准和平台 Bindings 为核心。
| 比较维度 | Vercel Functions | Cloudflare Workers |
|---|---|---|
| 默认执行位置 | Region-first,通常选择靠近数据库的计算区域 | 默认在 Cloudflare 全球网络中靠近请求执行 |
| 主要执行模型 | Fluid compute,共享实例并发与动态扩缩 | 轻量 V8 Isolate,由 workerd 调度执行 |
| Node.js 兼容 | Node.js Runtime 提供完整 Node API 与原生模块 | Web API 优先,通过 nodejs_compat 覆盖部分 Node API |
| 框架集成 | Next.js 与 Vercel 预览、构建和路由深度集成 | 广泛支持全栈框架,通常通过 Workers Adapter 部署 |
| 数据能力 | 连接 Vercel Storage、Marketplace 或外部数据库 | 通过 Binding 连接 KV、D1、R2、Durable Objects 等 |
| 后台工作 | waitUntil、Cron 以及外部队列或工作流 | waitUntil、Queues、Cron Triggers、Workflows |
| 开源边界 | CLI、Builders 与 SDK 开源,托管计算平台不可完整自托管 | workerd 运行时开源,全球网络与托管服务不可完整复制 |
| 更适合 | Vercel 全栈应用、完整 Node 生态和数据区域优先场景 | 全球边缘 API、Web 标准代码和 Cloudflare 数据服务 |
如果应用以 Next.js 或 Vercel 预览部署为中心,需要完整 Node.js、原生依赖,并希望让计算靠近单一区域数据库,Vercel Functions 往往更顺手;如果目标是让请求处理靠近全球用户,采用 Fetch API,并大量使用 KV、D1、R2、Durable Objects 或 Queues,Cloudflare Workers 通常更自然。最终应使用真实的数据库位置、冷启动、并发、流式响应和成本模型进行验证。
资料核验
版本、维护信息与本页采用的官方资料来源。
本页依据 Vercel Functions 官方概述、Runtime、Fluid compute、限制、配置和 @vercel/functions API 文档,以及 Vercel 官方开源仓库整理。版本通过官方 GitHub Releases 与 npm Registry 核验;平台限制和价格变化较快,生产采用前应再次核对目标套餐。
官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 28 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。