返回项目目录
云函数平台精选项目

Vercel Functions

与 Web 框架和 Vercel 部署流程深度集成的托管 Serverless 计算服务。

主要语言TypeScript
开源许可Apache-2.0(SDK / CLI)
项目类型云函数平台
维护状态活跃维护
OVERVIEW

项目概述

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 CLIv58.1.0
@vercel/functionsv3.7.6
主要计算模式Fluid compute / Region-first
FEATURES

主要特点

Vercel Functions 把框架路由、构建分析、运行时、自动扩缩、发布预览和可观测性整合到同一条应用交付链路。

01

框架原生函数构建

可直接使用 api 目录,也能从 Next.js Route Handler、SSR 页面以及多种全栈框架自动生成函数,无需逐个维护基础设施模板。

02

Fluid compute

Node.js 与 Python 等运行时可让多个调用共享一个实例并发执行,平台优先利用已有资源后再扩容,以降低空闲和冷启动成本。

03

多语言与多运行时

官方运行时覆盖 Node.js、Bun、Python、Rust、Go、Ruby、WebAssembly 与 Edge,并允许通过 Runtime API 和 Build Output API 扩展。

04

完整 Node.js 与 Web API

Node.js Functions 可使用 Node 核心模块、原生依赖和 npm 生态,也支持 Request、Response、Fetch、Streams 等标准 Web API。

05

流式响应与后台收尾

可持续向客户端发送生成内容或增量数据,并通过 waitUntil 或 Next.js after 在响应后执行日志、分析与非关键副作用。

06

区域、扩缩与故障转移

函数按区域优先运行并自动扩缩,可将计算部署在靠近数据库的位置;特定套餐支持多区域和自定义故障转移。

07

Cron 与平台集成

Cron Job 可以按计划调用函数,函数还能使用 Vercel Storage、Edge Config、环境变量、OIDC 和 Marketplace 集成。

08

日志、指标与 Tracing

Dashboard 提供运行日志、调用、错误率、执行时长和外部请求视图,并可通过 OpenTelemetry、Log Drain 与 Trace Drain 接入监控系统。

USE CASES

适用场景

适合已经部署在 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。

EVALUATION

优点与注意事项

技术选型不仅要看能力,也要理解它带来的团队成本。

主要优点

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 实例会并发复用

多个请求可能共享进程和模块级资源。全局连接池可以复用,但用户身份、请求缓存和可变业务状态不能泄漏到其他请求。

数据区域决定端到端延迟

函数靠近用户并不代表靠近单区域数据库。频繁跨区域查询会增加延迟和出口成本,应优先让计算靠近主要数据源。

waitUntil 不是耐久队列

它适合日志和非关键收尾工作,但仍受函数生命周期和最大时长约束;要求保证执行、重试和长流程时应使用队列或工作流。

成本需要同时看 CPU 与内存

Fluid compute 分别计算 Active CPU、Provisioned Memory 和调用次数。I/O 等待可暂停 CPU 计费,但内存会持续占用。

平台集成会增加迁移成本

Route 配置、Edge Config、存储、OIDC 和 Vercel 专用 API 使用越深,迁移到其他平台所需的适配工作越多。

QUICK START

快速开始

创建 Next.js App Router 项目,加入类型安全的 Route Handler、后台收尾任务和流式接口,再使用 Vercel CLI同步本地环境。

1创建 Next.js 项目
bash
npx create-next-app@latest vercel-functions-demo
cd vercel-functions-demo

npm install @vercel/functions
2创建类型安全的 Route Handler
typescript
// 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",
      },
    },
  );
}
3校验并处理 JSON 请求
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 },
  );
}
4在响应后执行非关键任务
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 });
  },
};
5返回流式响应
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",
    },
  });
}
6配置持续时间与首选区域
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",
  };
}
7同步环境并在本地验证
bash
npx 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。

ALTERNATIVES

类似项目

这些项目覆盖相邻的边缘计算、JavaScript 运行时和全栈框架能力,但执行位置、运行模型、基础设施控制和平台绑定程度不同。

COMPARISON

Vercel Functions vs Cloudflare Workers

Vercel Functions 和 Cloudflare Workers 都能把 Web 应用与 API 交给托管平台自动扩缩,但默认模型不同。Vercel Functions 以框架集成、区域优先计算和完整 Node.js 为核心;Cloudflare Workers 以全球网络、V8 Isolate、Web 标准和平台 Bindings 为核心。

比较维度Vercel FunctionsCloudflare 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 通常更自然。最终应使用真实的数据库位置、冷启动、并发、流式响应和成本模型进行验证。

VERIFICATION

资料核验

版本、维护信息与本页采用的官方资料来源。

最后核验2026 年 7 月 29 日
核验版本Vercel CLI v58.1.0 / @vercel/functions v3.7.6
内容维护Docs100 编辑整理
项目维护状态活跃维护

本页依据 Vercel Functions 官方概述、Runtime、Fluid compute、限制、配置和 @vercel/functions API 文档,以及 Vercel 官方开源仓库整理。版本通过官方 GitHub Releases 与 npm Registry 核验;平台限制和价格变化较快,生产采用前应再次核对目标套餐。

维护状态核验2026 年 7 月 26 日 · 最近可见代码活动:2026 年 7 月 28 日

官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 28 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。

查看官方仓库