Node.js v18升级后MongoDB模块未找到错误及警告修复咨询
Node.js 16升18后MongoDB模块错误与警告解决指南
问题背景
把Node.js版本从16升级到18后,碰到了MongoDB相关模块找不到的错误,还有循环依赖的警告。项目的package.json配置如下:
{ "dependencies": { "@7eleven/7boss-logger": "^1.2.2", "@7eleven/7boss-mongo-util": "^2.5.0", "@7eleven/7boss-objects": "^2.0.3", "@babel/polyfill": "^7.12.1", "aws-sdk": "^2.1506.0", "joi": "^17.11.0", "lambda-api": "^0.10.7", "moment": "^2.29.4", "mongodb": "^6.3.0", "npm-run-all": "^4.1.5" }, "devDependencies": { "@babel/cli": "^7.23.4", "@babel/core": "^7.23.3", "@babel/preset-env": "^7.23.3", "aws-sam-webpack-plugin": "^0.6.0", "babel-loader": "^8.3.0", "clean-webpack-plugin": "^4.0.0", "eslint": "^8.54.0", "eslint-config-prettier": "^8.10.0", "eslint-plugin-prettier": "^4.2.1", "prettier": "^2.8.8", "serverless": "^3.38.0", "serverless-domain-manager": "^6.4.4", "serverless-offline": "^13.3.0", "serverless-webpack": "^5.13.0", "webpack": "^5.89.0", "webpack-cli": "^4.10.0" } }
收到的警告信息:
(node:xxxx) Warning: Accessing non-existent property 'MongoError' of module exports inside circular dependency
解决步骤
1. 清缓存重装依赖
先彻底清理现有依赖和缓存,避免版本冲突:
- 删除
node_modules文件夹:Mac/Linux用rm -rf node_modules,Windows用rmdir /s /q node_modules - 删除
package-lock.json文件 - 重新安装依赖:
npm install
2. 升级第三方Mongo工具包
你用的@7eleven/7boss-mongo-util是2.5.0版本,这个包可能依赖旧版MongoDB驱动,跟Node18不兼容:
- 查一下这个包的更新记录,看看有没有支持Node18的版本,直接升到最新兼容版:
npm install @7eleven/7boss-mongo-util@latest - 如果这个包没更新,就得看它依赖的MongoDB相关模块,可能要手动补装缺失的依赖,但优先升级工具包比补旧依赖靠谱。
3. 适配MongoDB驱动版本(可选)
当前用的mongodb6.3.0是支持Node18的,但如果第三方工具包只认低版本驱动,可以试着把mongodb降到5.x系列,但还是优先升级工具包,别轻易降级驱动。
4. 调整Babel和Webpack配置适配Node18
Node18对ES模块和CommonJS的解析更严格,还要确保编译配置跟上:
- 把
@babel/preset-env的目标版本改成Node18,在.babelrc或项目的babel配置里修改:{ "presets": [ ["@babel/preset-env", { "targets": { "node": "18" } }] ] } - 确认
serverless-webpack和babel-loader的版本适配Node18,要是版本太旧也升个级。
5. 处理循环依赖警告
截图里的循环依赖警告大多是旧版Mongo包的问题,升级完相关包基本就没了。要是还能看到,要么忽略(不影响功能),要么启动项目时加参数屏蔽:node --no-warnings 你的入口文件.js
内容的提问来源于stack exchange,提问作者prashanthh
相关产品推荐
相关产品推荐

