Netlify Functions
与 Netlify Web 部署、预览和平台事件紧密集成的托管 Serverless Functions。
项目概述
Netlify Functions 让 JavaScript、TypeScript 和 Go 服务端代码随网站一起构建和版本化,并提供 Web 标准 Handler、自定义路由、后台函数、定时任务、平台事件和本地模拟环境。
Netlify Functions 是 Netlify 应用平台中的托管 Serverless 计算能力。项目默认把函数放在 netlify/functions 目录,JavaScript 与 TypeScript Handler 接收标准 Request 和 Netlify Context,并返回标准 Response;Go 则使用兼容 AWS Lambda 的 API。函数会与站点、Branch Deploy 和 Deploy Preview 一起构建成不可变版本,平台负责打包、路由、运行和自动扩缩。除普通同步 HTTP 请求外,Netlify 还提供最长 15 分钟的 Background Functions、按 UTC Cron 触发的 Scheduled Functions、部署、表单与用户生命周期等 Platform Events,以及流式响应、速率限制、区域、Memory / vCPU 和日志指标配置。Netlify CLI、@netlify/functions 与相关构建工具采用 MIT 等开源许可证,但托管函数基础设施、控制面和全球交付平台不能作为完整开源产品自行部署。
主要特点
Netlify Functions 把函数源码、Web 路由、异步任务、平台事件和部署预览放入同一套基于 Git 的应用交付流程。
Web 标准函数 API
TypeScript 与 JavaScript 函数接收 Request 和 Netlify Context,并返回 Response;Fetchable Module 形式也可与其他 Fetch 运行时共享结构。
灵活的文件与路由约定
函数默认位于 netlify/functions,可通过 config.path 使用 URLPattern 风格参数、多个路径、排除路径和 HTTP Method 限制。
Background Functions
设置 background: true 后客户端立即收到 202,函数可在后台执行最长 15 分钟,并在失败后按平台规则重试。
Scheduled Functions
通过 config.schedule 或 netlify.toml 设置 UTC Cron,在正式发布版本中执行报告、同步、清理和定时构建。
平台事件 Handler
函数可以订阅部署成功或失败、表单提交、用户注册、登录和资料变化等事件,Netlify 会验证平台事件签名后调用。
流式响应
同步函数可以返回以 ReadableStream 为 Body 的 Response,适合 AI Token、渐进内容和小型服务器推送结果。
资源与访问配置
Config 可设置 Region、Memory 或 vCPU、Rate Limit、静态文件优先和 Route;具体能力及配额取决于套餐。
本地模拟与不可变部署
Netlify Dev 或 Vite Plugin 可在本地模拟 Functions、Blobs 和环境变量;每个 Production、Branch 与 Preview Deploy 保留独立函数版本。
适用场景
适合随静态站点或全栈框架交付的 API、表单处理、Webhook、定时同步、异步任务和平台自动化。
网站 API 与表单后端
为营销站、内容站和产品前端提供联系表单、订阅、搜索代理和轻量数据接口,不必维护独立服务器。
Webhook 接收与集成
处理支付、CMS、Git、邮件和第三方 SaaS 回调,并以签名验证、幂等键和后台函数保护关键流程。
长一些的异步任务
Background Functions 适合批处理、抓取、媒体处理和慢速 API 工作流,客户端无需等待最终结果。
定时同步与报告
Scheduled Functions 可按 UTC Cron 运行缓存刷新、数据同步、报告汇总、备份触发和健康检查。
部署与业务事件自动化
Platform Events 可在部署、表单和用户生命周期变化时执行通知、审计、数据同步或访问控制。
全栈框架部署
Astro、Nuxt、TanStack Start、React Router 和 Next.js 等框架可通过 Netlify Adapter 把动态路由构建为 Functions。
优点与注意事项
技术选型不仅要看能力,也要理解它带来的团队成本。
主要优点
Netlify Functions 擅长的地方
- 函数与网站、域名、环境变量、Branch Deploy 和 Deploy Preview 共享发布生命周期
- 当前 API 使用标准 Request、Response 和 Fetchable Module,便于复用 Web 平台代码
- 内联 Config 同时表达路由、Method、后台、Cron、资源和速率限制,配置位置清晰
- Background、Scheduled 与 Platform Event Handler 覆盖多种请求外的执行场景
- Netlify Dev 与 Vite Plugin 可在本地模拟平台能力,缩短开发反馈周期
- CLI、Functions 类型包和构建工具开源,可检查本地打包与部署接口
需要注意
采用前应考虑的问题
MIT 许可证覆盖 @netlify/functions、CLI 等工具,不代表 Netlify 的函数调度、控制面、网络和托管服务可以完整自托管。
同步、流式、定时与后台函数的持续时间和 Payload 上限不同;把普通函数改成 Stream 或 Background 前应重新核对行为。
调用者只会收到 202,真正结果应写入数据库、对象存储或通知系统,并提供任务 ID 和查询状态的方式。
它按 UTC 触发且持续时间较短,重要任务仍需幂等、锁、状态记录、失败告警和必要的后台任务拆分。
普通 Functions 使用区域化 Serverless Runtime;Edge Functions 是单独的边缘执行产品,两者的 API、限制、依赖兼容和位置不同。
本地文件和模块内变量不能作为持久数据库。文件、任务进度和共享状态应放入 Netlify Blobs 或外部数据服务。
默认或自定义 Region 应靠近数据库和上游服务,否则每次调用都会承担跨区域延迟与可能的网络费用。
Credit-based 与 Legacy Plan 的计费、后台函数、Observability 和资源调整能力不同,采用前应核对当前账户类型。
快速开始
安装类型包与 Netlify CLI,创建使用当前 Web 标准 API 的 TypeScript 函数,再在本地模拟路由、环境变量和后台行为。
bashnpm install @netlify/functions
npm install --save-dev netlify-clitypescript// netlify/functions/hello.mts
import type { Config, Context } from "@netlify/functions";
export default async (request: Request, context: Context) => {
const name = new URL(request.url).searchParams.get("name")?.trim() || "World";
return Response.json({
message: `Hello, ${name}!`,
requestId: context.requestId,
});
};
export const config: Config = {
path: "/api/hello",
method: "GET",
};typescript// netlify/functions/product.mts
import type { Config, Context } from "@netlify/functions";
export default async (_request: Request, context: Context) => {
const sku = context.params.sku;
return Response.json({
sku,
available: true,
});
};
export const config: Config = {
path: "/api/products/:sku",
method: "GET",
rateLimit: {
action: "rate_limit",
aggregateBy: ["domain", "ip"],
windowSize: 60,
windowLimit: 120,
},
};typescript// netlify/functions/process-report.mts
import type { Config } from "@netlify/functions";
export default async (request: Request) => {
const { reportId } = (await request.json()) as {
reportId: string;
};
// 客户端已经收到 202;把最终结果写入持久存储。
await generateAndStoreReport(reportId);
};
export const config: Config = {
path: "/api/reports/process",
method: "POST",
background: true,
};typescript// netlify/functions/hourly-sync.mts
import type { Config } from "@netlify/functions";
export default async (request: Request) => {
const { next_run } = (await request.json()) as {
next_run: string;
};
await synchronizeCatalog();
console.log("Next run:", next_run);
};
export const config: Config = {
schedule: "@hourly",
};typescript// netlify/functions/stream.mts
import type { Config } from "@netlify/functions";
export default async () => {
const encoder = new TextEncoder();
const body = new ReadableStream({
start(controller) {
for (const message of ["连接成功", "读取数据", "完成"]) {
controller.enqueue(
encoder.encode(`data: ${JSON.stringify({ message })}\n\n`),
);
}
controller.close();
},
});
return new Response(body, {
headers: { "content-type": "text/event-stream" },
});
};
export const config: Config = {
path: "/api/stream",
};bashnpx netlify link
npx netlify dev
# 默认地址通常是 8888
curl "http://localhost:8888/api/hello?name=Ada"
curl "http://localhost:8888/api/products/sku-1001"
# 手动测试定时函数,不会启动真实 Cron
npx netlify functions:invoke hourly-sync下一步:新函数优先使用 .mts 与 config 对象,不要继续依赖旧的 callback Handler 和 -background 文件名约定。生产环境要按函数类型核对持续时间与 Payload 限制,并为 Webhook、Cron 和后台任务实现鉴权、幂等、超时与外部状态记录。
类似项目
这些运行时和平台也能承载 Web API 与 Serverless 代码,但框架集成、执行位置、后台任务和平台服务各有侧重。
Vercel Functions
与 Web 框架和 Vercel 部署流程深度集成的托管 Serverless 计算服务。
查看项目Cloudflare Workers
在 Cloudflare 全球网络上构建、部署和扩展应用的 Serverless 计算平台。
查看项目Node.js
基于 V8、用于服务器、命令行工具和网络应用的跨平台 JavaScript 运行时。
查看项目AWS Lambda
AWS 的事件驱动 Serverless 计算服务,支持广泛的语言、触发器和云服务集成。
访问官网Deno Deploy
面向 JavaScript、TypeScript 与 Web 标准应用的全球托管运行平台。
访问官网Netlify Functions vs Vercel Functions
Netlify Functions 和 Vercel Functions 都把服务端代码与 Web 项目的 Git 部署、预览环境和框架构建结合起来。Netlify 以独立函数目录、Background / Scheduled Functions 和 Platform Events 见长;Vercel 则以 Next.js 深度集成、Fluid compute、多运行时和区域优先计算为核心。
| 比较维度 | Netlify Functions | Vercel Functions |
|---|---|---|
| 基础入口 | netlify/functions 文件与框架 Adapter 生成函数 | api 文件、Next.js Route Handler 与框架构建输出 |
| 编程接口 | Request、Context、Response 与 Fetchable Module | Request、Response、Node.js API 与框架 Handler |
| 计算模型 | 区域化、短生命周期的 Serverless Functions | Region-first Fluid compute,可并发复用实例 |
| 长任务 | Background Functions 最长 15 分钟并返回 202 | waitUntil / after 负责收尾,长任务通常用外部工作流 |
| 定时执行 | Scheduled Functions,代码或 netlify.toml 声明 Cron | Vercel Cron 调用指定 Function 路由 |
| 平台事件 | 部署、表单与用户生命周期 Handler | 主要通过 Webhook、Cron 和外部事件源触发 |
| 边缘能力 | Edge Functions 是与普通 Functions 分开的产品 | 可为 Vercel Function 选择 Edge Runtime |
| 更适合 | Netlify 网站、异步后台、平台事件和明确文件函数 | Next.js、完整 Node.js、多运行时和 Fluid compute |
如果项目已使用 Netlify 部署,并需要 Background Functions、Scheduled Functions、表单或部署事件,Netlify Functions 的整合更直接;如果应用以 Next.js 为核心、依赖完整 Node.js 或原生模块,并希望利用 Fluid compute 并发与多运行时,Vercel Functions 通常更自然。两者都应根据数据库位置、函数限制、预览环境、后台任务可靠性和真实计费模型进行验证。
资料核验
版本、维护信息与本页采用的官方资料来源。
本页依据 Netlify Functions 官方 Overview、Get Started、API、Configuration、Background 与 Scheduled Functions 文档,以及 Netlify CLI 和 npm Registry 整理。示例使用当前 .mts、Request / Response 和内联 Config API。
官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 27 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。