升级Node.js/npm后执行npm命令触发ERR_REQUIRE_ESM错误求助
解决VSCode终端中npm ERR_REQUIRE_ESM全局命令失效问题
问题场景
- 初始使用系统自带的早期npm v10版本,升级至最新非LTS版本并重启后,执行
npm init触发ERR_REQUIRE_ESM错误:提示C:\Program Files\nodejs\node_modules\npm\node_modules\cacache\lib\entry-index.js中用require()加载ES模块p-map的index.js不被支持,建议改用动态import() - 降级到LTS版本后,VSCode终端内除了
npm命令本身,所有子命令(如npm init、npm install <包名>)均触发相同错误,但系统原生Powershell、CMD执行所有npm命令完全正常
可行解决方案
1. 彻底重启VSCode
完全关闭VSCode所有窗口,重新打开后再尝试执行npm命令——VSCode集成终端可能缓存了旧的node/npm环境路径,重启后会刷新环境。
2. 校验VSCode终端的npm路径
在VSCode终端执行where npm,对比Powershell中执行同命令的输出:
- 若路径不一致,说明VSCode加载了旧的npm路径:
- 打开VSCode设置(
Ctrl+,),搜索「terminal.integrated.env.windows」(Windows系统) - 删除自定义PATH中旧的node/npm路径,确保指向当前安装的LTS版本路径(默认是
C:\Program Files\nodejs\)
- 打开VSCode设置(
3. 重置VSCode终端配置
- 按
Ctrl+Shift+P打开命令面板,输入「Terminal: Select Default Profile」,切换到Powershell或CMD作为默认终端,然后重启终端 - 若仍有问题,删除VSCode缓存目录(Windows下为
%APPDATA%\Code\Cache和%APPDATA%\Code\CachedData),再重启VSCode
4. 全局重新安装npm
在系统Powershell中执行npm install -g npm@lts,强制重新安装LTS版本的npm,完成后重启VSCode终端再测试。
原因说明
VSCode集成终端会保留会话环境变量缓存,当你升级/降级npm后,终端未及时更新环境变量,导致调用了旧的npm依赖文件(如cacache的旧版本依赖不兼容的ES模块);而系统原生Powershell/CMD每次启动都会重新加载系统环境变量,因此不受缓存影响。
内容的提问来源于stack exchange,提问作者Birphon
相关产品推荐
相关产品推荐

