You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vercel、Netlify部署Serverless函数返回源码不执行如何解决

故障核心原因

两个平台出现相同的返回源码问题,本质是平台未识别到对应文件是可执行Serverless函数,直接将其作为静态文本资源返回。本地开发环境对函数格式容错度高,不会严格校验入口规范,因此会出现本地运行正常、线上部署失效的差异。

Vercel 平台修复方案

Vercel Node.js运行时对Serverless函数有强制入口规范,不符合要求就不会被识别为可执行函数:

  • CommonJS规范下必须通过module.exports导出处理函数,不要直接写业务逻辑、不做导出;如果项目根目录package.json已声明"type": "module",使用ES Module标准导出即可。
  • CommonJS 正确写法参考(对应路径/api/index.js):
module.exports = async (req, res) => {
  // 替换为实际业务逻辑
  res.status(200).json({ success: true, data: "正常响应" })
}
  • ES Module 正确写法参考:
export default async function handler(req, res) {
  // 替换为实际业务逻辑
  res.status(200).json({ success: true, data: "正常响应" })
}
  • 配置检查:确认vercel.json中没有将/api目录配置为静态资源目录,也没有给对应接口路径配置指向静态文件的重写规则。
Netlify 平台修复方案

Netlify的函数签名规范和Vercel不通用,必须按平台要求导出名为handler的方法才会被识别:

  • CommonJS规范下需要给exports对象挂载handler属性,ES Module规范下直接导出名为handler的常量/函数即可。
  • CommonJS 正确写法参考(对应路径/functions/tweet.js):
exports.handler = async (event, context) => {
  // 替换为实际业务逻辑
  return {
    statusCode: 200,
    body: JSON.stringify({ success: true, data: "正常响应" })
  }
}
  • ES Module 正确写法参考:
export const handler = async (event, context) => {
  // 替换为实际业务逻辑
  return {
    statusCode: 200,
    body: JSON.stringify({ success: true, data: "正常响应" })
  }
}
  • 配置检查:确认netlify.toml中配置的functions目录和你实际存放函数的目录完全一致,没有配置规则将/functions路径下的文件作为静态资源发布。
通用排查项

修正入口写法后仍异常的,逐一核对以下配置:

  • 函数文件无语法错误,所有依赖都已在package.json中声明,部署阶段依赖安装无报错
  • 平台路由/重写规则中,没有把对应接口路径指向静态资源目录
  • 线上配置的Node.js运行时版本和本地开发版本大版本差不超过2,避免语法兼容问题导致函数加载失败

内容的提问来源于stack exchange,提问作者Probably Arth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 04:01:18