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

在Vercel部署Express.js失败:Edge Function'middleware'引用不支持模块

解决Express.js部署Vercel时Edge Function "middleware"模块不支持的错误

问题原因

Vercel会自动检测项目中的middleware.js/middleware.ts文件并将其作为Edge Function运行,但Edge Runtime不支持Node.js专属模块(如express、fs等)。如果你的项目中存在这类middleware文件,且它引用了不兼容的模块,就会触发该错误。另外,若vercel.json配置未明确指定middleware的运行时,也会导致冲突。

解决方案

1. 检查并处理middleware文件

  • 查看项目根目录或api目录下是否存在middleware.js/middleware.ts文件:
    • 如果不需要该middleware,直接删除即可。
    • 如果需要保留,要么修改文件内容适配Edge Runtime(替换所有Node.js专属模块为Edge支持的API,比如用fetch替代axios);要么配置Vercel用Node.js Runtime运行它(见步骤2)。

2. 修改vercel.json明确指定运行时

如果要保留middleware并使用Node.js Runtime,在builds数组中添加对应配置:

{
    "version": 2,
    "builds": [
        {
            "src": "./api/index.js",
            "use": "@vercel/node"
        },
        {
            "src": "./middleware.js", // 替换为你的middleware实际路径
            "use": "@vercel/node"
        }
    ],
    "routes": [
        {
            "src": "/(.*)",
            "dest": "/api"
        }
    ]
}

3. 确保Express入口文件符合Vercel Node规范

你的api/index.js需要用serverless-http包装Express应用,否则Vercel无法正确处理请求:

const express = require('express');
const serverless = require('serverless-http');

const app = express();

// 示例路由逻辑
app.get('/', (req, res) => {
  res.send('Express running on Vercel');
});

// 导出serverless兼容的handler
module.exports.handler = serverless(app);

执行npm install serverless-http安装依赖包。

4. 清理缓存重新部署

  • 删除本地项目的.vercel目录,重新推送代码到Vercel。
  • 在Vercel控制台部署时,勾选"Skip Build Cache"选项,避免缓存导致的配置冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:10:21