执行npm i遇ES模块require不支持错误,求解决方法
解决npm i时ES Module与CommonJS冲突的问题
问题分析
你遇到的错误是因为cacache(npm的核心依赖包)中的entry-index.js使用CommonJS的require()加载了ES模块格式的p-map,而Node.js 22对ES模块和CommonJS的兼容性处理更严格,导致冲突。
推荐解决方案
1. 降级Node.js或npm版本(优先推荐)
Node.js 22是较新的版本,可能与npm 10.8.3存在兼容性问题,建议切换到LTS版本(如20.x):
- 若使用nvm管理Node.js版本:
nvm install 20 --lts nvm use 20 - 若使用Manjaro的包管理器:
切换后重新执行sudo pacman -S nodejs-lts-hydrogennpm i即可。
2. 清除缓存后重新安装
尝试清除npm缓存并删除本地依赖文件,重新安装:
npm cache clean --force rm -rf node_modules package-lock.json npm install
不推荐的临时方案(手动修改核心文件)
不建议修改npm的核心依赖文件,因为更新npm时会被覆盖,还可能引发其他问题。如果一定要尝试:
- 打开
/usr/lib/node_modules/npm/node_modules/cacache/lib/entry-index.js,找到所有require('p-map')的语句。 - 将同步的
require改为动态import(),例如:
原代码:
修改为(需用async/await或Promise回调处理异步加载):const pMap = require('p-map');
注意:这种修改可能需要调整整个文件的代码结构,风险较高。// 若文件是CommonJS模块,需用async函数包裹逻辑 async function yourFunction() { const { default: pMap } = await import('p-map'); // 后续依赖pMap的代码放在这里 }
内容的提问来源于stack exchange,提问作者AgedLace
相关产品推荐
相关产品推荐

