Next.js14切换Turbopack后Mongoose报TypeError,求其他修复方案
修复Next.js 14 + Mongoose + Turbopack的兼容性错误
针对切换到Turbopack后出现TypeError: Cannot set properties of undefined (setting 'base')的问题,可尝试以下修复方案:
升级Mongoose至最新稳定版
Turbopack对ES模块的处理逻辑与Webpack存在差异,旧版本Mongoose可能存在未适配的问题。执行以下命令升级:npm install mongoose@latest # 或使用yarn yarn add mongoose@latest配置Turbopack规则排除Mongoose转译
在next.config.js中添加Turbopack专属配置,保留Mongoose的原生模块结构,避免转译导致的异常:/** @type {import('next').NextConfig} */ const nextConfig = { experimental: { turbopack: { rules: { 'node_modules/mongoose/**/*': { loaders: ['next-swc'], resolve: { conditionNames: ['node'], }, }, }, }, }, }; module.exports = nextConfig;调整Mongoose导入与初始化逻辑
避免在React Server Components中直接导入完整的Mongoose对象,改为按需导入,并将数据库连接逻辑封装在专属服务器模块中:// src/lib/mongo.ts(仅在服务器端使用) import { connect, model, Schema } from 'mongoose'; export async function connectDB() { if (mongoose.connection.readyState === 1) { return mongoose.connection.asPromise(); } return connect(process.env.MONGODB_URI!); } // 后续在API路由或服务器组件中导入使用 import { connectDB } from '@/lib/mongo';清除缓存并重启服务
清理Next.js和Turbopack的缓存文件,避免旧缓存导致的异常:# macOS/Linux rm -rf .next node_modules/.cache npm run dev -- --turbo # Windows rmdir /s /q .next && rmdir /s /q node_modules\.cache npm run dev -- --turbo检查模块类型一致性
确保项目中ES模块与CommonJS模块的使用一致:- 若使用ES模块,在
package.json中添加"type": "module" - 若保持CommonJS,避免使用
import/export语法导入Mongoose(改用require)
- 若使用ES模块,在
内容的提问来源于stack exchange,提问作者Pranit Patil
相关产品推荐
相关产品推荐

