Vercel部署Serverless Function崩溃,求助解决方法
解决Vercel部署时"Serverless Function has crashed"错误的方案
1. 查看详细错误日志
Vercel默认提示不会显示具体崩溃原因,必须查看函数日志:
- 登录Vercel控制台,进入对应项目的Functions标签页
- 定位到崩溃的函数,点击查看Logs面板,里面的
Error或Exception栈信息会直接指出问题(比如依赖缺失、语法错误、环境变量未配置等)
2. 核对依赖与Node.js版本
- 在
package.json的engines字段指定Vercel支持的Node.js版本(例如"node": ">=18.x"),避免版本特性冲突 - 检查所有生产依赖是否都在
dependencies中声明,本地全局安装的依赖不会被Vercel自动安装,必须通过npm install --save添加 - 禁止在生产代码中使用
devDependencies里的包,Vercel默认不会安装该目录下的依赖(除非在项目配置中手动开启installDevDependencies)
3. 检查环境变量配置
- 如果函数依赖环境变量(如数据库连接串、API密钥),确认这些变量已在Vercel控制台Settings > Environment Variables中配置,且勾选了Production环境
- 代码中必须对环境变量做存在性校验,避免因变量缺失导致崩溃,示例:
const DB_URL = process.env.DB_URL; if (!DB_URL) { throw new Error("DB_URL environment variable is missing"); }
4. 适配Vercel函数规范
- Vercel Serverless Functions不需要手动监听端口:
- Express应用需导出
app实例,而非调用app.listen(),示例:const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello World'); }); module.exports = app; // 导出实例而非启动服务 - 自定义函数需遵循Vercel格式:导出
handler函数,接收req和res参数
- Express应用需导出
- 排查代码中的未捕获Promise异常、同步阻塞操作或无限循环,这些都会直接导致函数崩溃
5. 检查函数大小限制
- Vercel Serverless Functions解压后最大支持50MB,检查依赖包是否过大:
- 用
npm prune --production在本地模拟生产依赖,查看依赖总大小 - 移除无用依赖或替换为轻量化替代包
- 用
6. 本地模拟部署测试
- 使用Vercel CLI在本地复现问题,方便调试:
启动后调用函数,复现崩溃场景,直接在本地排查代码问题npm install -g vercel vercel dev
内容的提问来源于stack exchange,提问作者Ismile Arefin
相关产品推荐
相关产品推荐

