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兼容的认证逻辑:
- 打开你的NextAuth配置文件(通常是
app/api/auth/[...nextauth]/route.ts或pages/api/auth/[...nextauth].ts) - 修改配置,设置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
相关产品推荐
相关产品推荐

