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

NextJS构建报错:Edge Runtime不允许动态代码求值

解决Next.js构建失败:Edge Runtime禁止动态代码评估问题

问题根源

你的项目使用了next-auth,同时包含middleware。Next.js 13+默认将middleware运行在Edge Runtime环境中,而next-auth/react依赖的@babel/runtime/regenerator模块使用了动态代码评估(如eval、new Function),这在Edge Runtime中是被禁止的,导致构建报错。

解决方案

方案1:将NextAuth配置为适配Edge Runtime

Edge Runtime不支持基于数据库的Session策略,需切换为JWT策略,并确保使用Edge兼容的认证逻辑:

  1. 打开你的NextAuth配置文件(通常是app/api/auth/[...nextauth]/route.ts或pages/api/auth/[...nextauth].ts)
  2. 修改配置,设置Session策略为jwt:
import NextAuth from "next-auth";
import CredentialsProvider from "next-auth/providers/credentials";

export const authOptions = {
  // 使用JWT替代数据库Session,适配Edge Runtime
  session: {
    strategy: "jwt",
  },
  providers: [
    CredentialsProvider({
      credentials: {
        email: { label: "邮箱", type: "email" },
        password: { label: "密码", type: "password" },
      },
      async authorize(credentials) {
        // 对接你的后端认证接口
        const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/auth/login`, {
          method: "POST",
          body: JSON.stringify(credentials),
          headers: { "Content-Type": "application/json" },
        });
        const user = await res.json();
        
        if (res.ok && user) return user;
        return null;
      },
    }),
  ],
};

export default NextAuth(authOptions);

方案2:强制Middleware使用Node.js Runtime

如果你的业务不需要Edge Runtime的特性,可以直接指定middleware使用Node.js环境:
在middleware.ts文件顶部添加配置:

// middleware.ts
export const config = {
  runtime: "nodejs", // 强制切换到Node.js Runtime,允许动态代码评估
};

export function middleware(request: NextRequest) {
  // 你的原有middleware逻辑
}

方案3:升级NextAuth到最新版本

部分旧版next-auth存在Edge Runtime兼容问题,执行以下命令升级:

npm update next-auth
# 或使用yarn
yarn upgrade next-auth

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:10:11