npm ERR! cb() never called 修复:npm 与 Node.js 版本不兼容的根因

npm ERR! cb() never called! 看起来像 npm 内部崩溃,但真正的根因通常是 npm 版本与当前 Node.js 版本不兼容

最常见根因:版本不匹配

错误表现:

ERROR: npm v11.17.0 is known not to run on Node.js v14.21.3.
This version of npm supports the following node versions: `^20.17.0 || >=22.9.0`.

SyntaxError: Unexpected token '&&='
    at wrapSafe (internal/modules/cjs/loader.js:1029:16)

npm 11 内部使用了 &&= 逻辑赋值运算符,这是 ES2021 特性,Node.js 14 不支持,导致 npm 自身启动时语法解析失败。

解决方案:切换 Node.js 版本

# 查看当前版本
node -v
npm -v

# 用 nvm 切换到兼容版本
nvm install 22
nvm use 22

# 验证
node -v   # v22.x.x
npm -v    # 10.x.x 或更高

通用修复流程

如果版本兼容但仍然报错:

1. 升级 npm

npm install -g npm@latest

2. 清理缓存重装

npm cache clean --force
rm -rf node_modules
rm package-lock.json
npm install

macOS 还可以删除整个 npm 缓存目录:

rm -rf ~/.npm

3. 切换国内镜像

国内网络拉包失败时:

npm config set registry https://registry.npmmirror.com
npm install

4. 老项目依赖冲突

npm install --legacy-peer-deps

npm 与 Node.js 版本对照

npm 版本最低 Node.js 要求
npm 11Node.js 20.17 / 22.9+
npm 10Node.js 18+
npm 9Node.js 14.17+
npm 8Node.js 12+

用 nvm 安装 LTS 版本可以拿到对应版本的 npm:

nvm install --lts
nvm use --lts