Next.js 14中禁用Edge Runtime以解决next-auth、Prisma适配器及getSession相关构建报错问题
Next.js 14中禁用Edge Runtime以解决next-auth、Prisma适配器及getSession相关构建报错问题
Hey there! 看你遇到的这个构建报错,我之前也踩过类似的坑——这是因为next-auth的某些依赖模块(比如你日志里的@babel/runtime/regenerator)用到了动态代码评估(像eval、new Function这类),而Edge Runtime出于安全和性能限制,不允许这类操作。既然你说Edge Runtime不是必须的,那直接禁用它就能搞定问题,给你几个靠谱的解决办法:
1. 单个页面/路由组件禁用
如果只是特定页面或路由用到了next-auth的方法(比如getSession),可以在对应文件的顶部添加运行时配置:
export const runtime = 'nodejs'; // 指定使用Node.js运行时,替代Edge Runtime
这样这个页面就会用Node.js环境运行,不会触发Edge的限制规则。
2. 全局禁用Edge Runtime
如果你的整个项目都不需要Edge Runtime,直接在next.config.js里配置全局默认运行时:
/** @type {import('next').NextConfig} */ const nextConfig = { runtime: 'nodejs', // 这里可以保留你原本的其他配置项 } module.exports = nextConfig;
设置后,所有页面和API路由都会默认使用Node.js运行时,不用逐个文件单独配置。
3. API路由单独禁用
要是你是在API路由里使用next-auth(比如auth相关的接口),同样在该API文件顶部加上配置:
export const runtime = 'nodejs';
这样就能避开动态代码评估的报错,让API路由正常构建。
简单说,核心就是把Edge Runtime切换回传统的Node.js运行时,因为Node.js对动态代码执行没有这类限制,刚好适配next-auth的依赖需求。
备注:内容来源于stack exchange,提问作者mxcdh
相关产品推荐
相关产品推荐

