NextJS执行next build时NextAuth出现TypeError的问题求助
解决Next.js 15 + next-auth 4.x构建时provider导入错误问题
问题背景
使用以下版本依赖:
"next": "^15.1.4", "next-auth": "^4.24.11",
执行next build时报错TypeError: c is not a function,禁用构建压缩后错误变为TypeError: facebook is not a function。调试打包后的代码发现,导入的FacebookProvider是ES模块对象{__esModule: true, default: ƒ}而非预期的函数,说明Next.js打包器未正确处理next-auth provider的默认导出。
解决方案
方案1:显式获取provider的默认导出
修改provider的导入语句,明确提取default导出:
import NextAuth from "next-auth"; import { default as GoogleProvider } from "next-auth/providers/google"; import { default as FacebookProvider } from "next-auth/providers/facebook"; import { default as GitHubProvider } from "next-auth/providers/github";
或者保持原有导入方式,在使用时调用default属性:
// 导入方式不变 import FacebookProvider from "next-auth/providers/facebook"; // 使用时调整为 FacebookProvider.default({ clientId: process.env.FACEBOOK_CLIENT_ID, clientSecret: process.env.FACEBOOK_CLIENT_SECRET })
方案2:配置Next.js转译next-auth相关包
在next.config.js中添加transpilePackages配置,强制Next.js转译next-auth及其provider模块:
/** @type {import('next').NextConfig} */ const nextConfig = { transpilePackages: ['next-auth', 'next-auth/providers'], // 其他现有配置 } export default nextConfig;
方案3:升级next-auth到兼容版本
next-auth 4.x对Next.js 15的支持可能存在适配问题,尝试升级next-auth到最新的4.x稳定版:
npm update next-auth # 或 yarn upgrade next-auth
原理说明
Next.js 15的打包器(Turbopack或优化后的Webpack)在处理某些第三方ES模块时,可能会默认保留模块的包装结构,导致直接导入时拿到的是模块对象而非默认导出的函数。显式提取default或配置转译可以强制打包器正确解析模块导出结构。
内容的提问来源于stack exchange,提问作者splash27
相关产品推荐
相关产品推荐

