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

Netlify Functions

与 Netlify Web 部署、预览和平台事件紧密集成的托管 Serverless Functions。

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

项目概述

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 CLIv27.0.1
@netlify/functionsv5.3.0
默认函数目录netlify/functions
FEATURES

主要特点

Netlify Functions 把函数源码、Web 路由、异步任务、平台事件和部署预览放入同一套基于 Git 的应用交付流程。

01

Web 标准函数 API

TypeScript 与 JavaScript 函数接收 Request 和 Netlify Context,并返回 Response;Fetchable Module 形式也可与其他 Fetch 运行时共享结构。

02

灵活的文件与路由约定

函数默认位于 netlify/functions,可通过 config.path 使用 URLPattern 风格参数、多个路径、排除路径和 HTTP Method 限制。

03

Background Functions

设置 background: true 后客户端立即收到 202,函数可在后台执行最长 15 分钟,并在失败后按平台规则重试。

04

Scheduled Functions

通过 config.schedule 或 netlify.toml 设置 UTC Cron,在正式发布版本中执行报告、同步、清理和定时构建。

05

平台事件 Handler

函数可以订阅部署成功或失败、表单提交、用户注册、登录和资料变化等事件,Netlify 会验证平台事件签名后调用。

06

流式响应

同步函数可以返回以 ReadableStream 为 Body 的 Response,适合 AI Token、渐进内容和小型服务器推送结果。

07

资源与访问配置

Config 可设置 Region、Memory 或 vCPU、Rate Limit、静态文件优先和 Route;具体能力及配额取决于套餐。

08

本地模拟与不可变部署

Netlify Dev 或 Vite Plugin 可在本地模拟 Functions、Blobs 和环境变量;每个 Production、Branch 与 Preview Deploy 保留独立函数版本。

USE CASES

适用场景

适合随静态站点或全栈框架交付的 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。

EVALUATION

优点与注意事项

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

主要优点

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 类型包和构建工具开源,可检查本地打包与部署接口

需要注意

采用前应考虑的问题

托管平台不等于开源 CLI

MIT 许可证覆盖 @netlify/functions、CLI 等工具,不代表 Netlify 的函数调度、控制面、网络和托管服务可以完整自托管。

不同函数类型限制不同

同步、流式、定时与后台函数的持续时间和 Payload 上限不同;把普通函数改成 Stream 或 Background 前应重新核对行为。

Background 返回值不会传给客户端

调用者只会收到 202,真正结果应写入数据库、对象存储或通知系统,并提供任务 ID 和查询状态的方式。

Scheduled Functions 不是完整工作流引擎

它按 UTC 触发且持续时间较短,重要任务仍需幂等、锁、状态记录、失败告警和必要的后台任务拆分。

Functions 与 Edge Functions 必须区分

普通 Functions 使用区域化 Serverless Runtime;Edge Functions 是单独的边缘执行产品,两者的 API、限制、依赖兼容和位置不同。

临时运行环境不可保存状态

本地文件和模块内变量不能作为持久数据库。文件、任务进度和共享状态应放入 Netlify Blobs 或外部数据服务。

数据库与函数区域需要匹配

默认或自定义 Region 应靠近数据库和上游服务,否则每次调用都会承担跨区域延迟与可能的网络费用。

成本和能力随计费体系变化

Credit-based 与 Legacy Plan 的计费、后台函数、Observability 和资源调整能力不同,采用前应核对当前账户类型。

QUICK START

快速开始

安装类型包与 Netlify CLI,创建使用当前 Web 标准 API 的 TypeScript 函数,再在本地模拟路由、环境变量和后台行为。

1安装类型包与本地开发工具
bash
npm install @netlify/functions
npm install --save-dev netlify-cli
2创建首个 TypeScript 函数
typescript
// 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",
};
3创建带路径参数与速率限制的 API
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,
  },
};
4运行后台处理任务
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,
};
5创建 UTC 定时任务
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",
};
6返回流式响应
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",
};
7在本地模拟 Netlify 环境
bash
npx 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 和后台任务实现鉴权、幂等、超时与外部状态记录。

ALTERNATIVES

类似项目

这些运行时和平台也能承载 Web API 与 Serverless 代码,但框架集成、执行位置、后台任务和平台服务各有侧重。

COMPARISON

Netlify Functions vs Vercel Functions

Netlify Functions 和 Vercel Functions 都把服务端代码与 Web 项目的 Git 部署、预览环境和框架构建结合起来。Netlify 以独立函数目录、Background / Scheduled Functions 和 Platform Events 见长;Vercel 则以 Next.js 深度集成、Fluid compute、多运行时和区域优先计算为核心。

比较维度Netlify FunctionsVercel Functions
基础入口netlify/functions 文件与框架 Adapter 生成函数api 文件、Next.js Route Handler 与框架构建输出
编程接口Request、Context、Response 与 Fetchable ModuleRequest、Response、Node.js API 与框架 Handler
计算模型区域化、短生命周期的 Serverless FunctionsRegion-first Fluid compute,可并发复用实例
长任务Background Functions 最长 15 分钟并返回 202waitUntil / after 负责收尾,长任务通常用外部工作流
定时执行Scheduled Functions,代码或 netlify.toml 声明 CronVercel 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 通常更自然。两者都应根据数据库位置、函数限制、预览环境、后台任务可靠性和真实计费模型进行验证。

VERIFICATION

资料核验

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

最后核验2026 年 7 月 29 日
核验版本Netlify CLI v27.0.1 / @netlify/functions v5.3.0
内容维护Docs100 编辑整理
项目维护状态活跃维护

本页依据 Netlify Functions 官方 Overview、Get Started、API、Configuration、Background 与 Scheduled Functions 文档,以及 Netlify CLI 和 npm Registry 整理。示例使用当前 .mts、Request / Response 和内联 Config API。

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

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

查看官方仓库