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

Next.js 14+Mongoose部署Vercel遇Edge Runtime动态代码评估错误

问题原因分析:Next.js 14 + Mongoose 8.4.4部署Vercel编译失败(Edge Runtime动态代码评估错误)

核心原因

  • Middleware触发Edge Runtime,错误加载Mongoose浏览器端包
    Next.js的Middleware默认运行在Edge Runtime环境,你的middleware.ts间接引用了MongoDB连接模块。Mongoose会自动根据运行环境选择入口文件:Node.js环境加载核心包,而浏览器/Edge环境会加载browser.umd.js——这个包包含eval、new Function这类动态代码逻辑,Edge Runtime严格禁止这类操作,直接触发编译报错。本地开发时Middleware的Edge环境限制更宽松,所以未出现问题。
  • Mongoose版本兼容性问题
    你使用的Mongoose ^8.4.4版本,其浏览器端打包产物仍保留了Edge Runtime禁用的动态代码逻辑,导致在Edge环境下触发限制。

解决办法

  • 避免Middleware直接/间接引用Mongoose
    调整Middleware逻辑,不要让它调用MongoDB连接模块。如果必须在Middleware中操作数据库,改用兼容Edge Runtime的MongoDB官方mongodb驱动,或者将数据库操作移到Server Components、API Routes(这些默认运行在Node.js Runtime)。
  • 强制Mongoose加载Node.js版本包
    在next.config.js中添加配置,让Webpack强制解析Mongoose的Node.js入口,避免加载浏览器端umd包:
    module.exports = {
      webpack: (config) => {
        config.resolve.alias['mongoose'] = require.resolve('mongoose');
        return config;
      },
    };
    
  • 调整Mongoose版本
    尝试升级到Mongoose最新稳定版,或者降级到8.3.x这类已知兼容Edge Runtime的版本,新版本可能修复了浏览器端包的动态代码问题。
  • 给Middleware指定Node.js Runtime
    如果你的Middleware不需要Edge Runtime特性,在middleware.ts顶部添加注释,强制使用Node.js Runtime:
    export const runtime = 'nodejs';
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:25:05