导入MongoServerError时出现Cannot use import statement outside a module错误排查
错误原因
- 直接导入未编译的源码文件:你导入的是
mongodb包内部的src/error.ts源码文件,这个文件用的是ES模块语法(比如import type),但你的项目tsconfig里配置的module是commonjs,Node.js加载这个文件时会把它当作CommonJS模块处理,自然识别不了ES模块的import语法,因此报错。 - 违反包的使用规范:
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
相关产品推荐
相关产品推荐

