Vercel部署Next.js+Mongoose应用编译失败问题求助
解决方案
问题根源
你的部署报错核心原因:
- Next.js 的
middleware.js默认运行在Edge Runtime,该环境严格禁止动态代码评估(如eval、new Function这类操作) - 你在
userModel.js中错误导入了 Mongoose 的浏览器版本(mongoose/dist/browser.umd.js),这个版本包含 Edge Runtime 不允许的动态代码逻辑 - 由于
middleware.js间接导入了userModel.js,编译时触发了 Edge Runtime 的限制检查
具体修复步骤
1. 修正 Mongoose 的导入路径
打开 src/models/userModel.js,把错误的导入语句:
import mongoose from 'mongoose/dist/browser.umd.js'
替换为 Node.js 环境的标准导入:
import mongoose from 'mongoose'
Mongoose 的浏览器版本仅适用于前端环境,你的数据模型需要运行在 Node.js 后端环境(API 路由、Server Components 等)。
2. 强制 Middleware 使用 Node.js Runtime
在 src/middleware.js 文件最顶部添加以下代码,指定该文件使用 Node.js 环境而非默认的 Edge Runtime:
export const runtime = 'nodejs'
这样就能避开 Edge Runtime 对动态代码的限制,同时兼容 Mongoose 的 Node.js 依赖。
3. 检查 NextAuth 配置的执行环境
确保 src/auth.js 中的数据库操作(比如用 Mongoose 查询用户)仅在Server Side执行:
- 不要在 Client Components 中直接调用 Mongoose 模型
- NextAuth 的
adapter或自定义回调逻辑(如session、jwt)必须运行在 Node.js 环境,避免涉及 Edge 环境代码
4. 验证本地编译
先在本地执行 npm run build,确认编译成功后再重新部署到 Vercel。
内容的提问来源于stack exchange,提问作者Naimur Rahman
相关产品推荐
相关产品推荐

