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

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)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:42:47