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

导入MongoServerError时出现Cannot use import statement outside a module错误排查

错误原因
  1. 直接导入未编译的源码文件:你导入的是mongodb包内部的src/error.ts源码文件,这个文件用的是ES模块语法(比如import type),但你的项目tsconfig里配置的module是commonjs,Node.js加载这个文件时会把它当作CommonJS模块处理,自然识别不了ES模块的import语法,因此报错。
  2. 违反包的使用规范:mongodb包本身已经编译好了可直接使用的CommonJS/ES模块产物,源码文件是给包维护者开发用的,不是给外部项目直接导入的。

解决方法

方法1:导入包的官方对外导出(推荐)

直接从mongodb包的顶层导出导入MongoServerError,这是官方设计的正确用法,包内部已经处理好模块兼容问题:

import { MongoServerError } from 'mongodb';

这种方式导入的是mongodb预编译好的模块文件,完全适配你的项目commonjs配置,不会出现语法错误,同时类型定义正常生效,instanceof判断也能正常工作。

方法2:调整tsconfig路径映射(可选,不推荐)

如果确实需要从特定路径导入,可以修改tsconfig.json的paths配置,让TypeScript自动解析到编译后的文件:

{
  "compilerOptions": {
    // 保留原有其他配置
    "paths": {
      "mongodb/src/error": ["node_modules/mongodb/dist/error"]
    }
  }
}

然后导入代码改为:

import { MongoServerError } from 'mongodb/src/error';

注意:这种方式依赖mongodb包的内部目录结构,后续包版本更新可能会失效,因此优先选方法1。

验证修复

修改导入方式后重新运行项目,if (error instanceof MongoServerError)的判断逻辑应该能正常执行,模块语法错误也会消失。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:51:11