使用Node 18/NPM 8执行npm i时提示tarball数据损坏是什么原因?
问题根因
- 你当前使用的是Node 18的开发预览版本(v18.0.0-pre),该版本内置的zlib模块存在已知的兼容性缺陷,解压校验逻辑比Node 17严格很多,大量旧版本npm包的标准压缩文件会被误判为损坏。
- 即使是Node 18正式版,也升级了内置zlib版本并默认开启严格校验规则,低于v8.6.0版本的npm没有适配该规则,同样会触发zlib解压校验失败的报错。
解决方案
按照优先级依次尝试以下操作即可:
- 替换开发预览版为Node 18正式稳定版,优先选择长期支持版本。如果使用nvm管理Node版本,可执行
nvm install 18 --lts安装,安装完成后会自动匹配适配的npm版本,再重新执行npm i即可。 - 若暂时不能更换Node版本,先将npm升级到适配Node 18的最新版本:执行
npm install -g npm@latest,升级完成后再尝试安装依赖。 - 若上述操作仍未解决,安装依赖时临时关闭zlib严格校验:执行
export NODE_ZLIB_NO_STRICT=1 && npm i即可绕过校验规则完成安装。 - 若仍然报错,可切换为npm官方源避免第三方镜像缓存的压缩包格式异常:执行
npm config set registry https://registry.npmjs.org/后再执行安装命令。
内容的提问来源于stack exchange,提问作者Jackie
相关产品推荐
相关产品推荐

