关于 tarball data for *** seems to be corrupted. Trying one more time 的解决方法

2,050 阅读2分钟

首发于 语雀文档@blueju

前言

新同事电脑上安装依赖出现了点问题,组员也未能解决,我也花了写些时间才解决,特此记录一下。
报错信息大致如下:

tarball data for @ngfed/fc-business seems to be corrupted. Trying one more time
...
Error: EPERM: operation not permitted
...
ENOENT: no such file or direcotry, open
...

环境

  • 公司内网
  • 公司私有 npm 源
  • 使用 Win10 电脑
  • 使用 npm 安装依赖

干货正文

本想详细记录不断尝试的过程与分析,但时间有限,不说过多的无效答案,我大概尝试过以下处理方案:

  1. 删除依赖重新安装
  2. 删除依赖并清空 npm 缓存后重新安装
  3. 删除 lock 文件重新安装(失去了具体 lock 版本控制,由于内网代理有问题,无 lock 后无法拉取内网 npm 仓库没有的最新包)
  4. 切换到非系统盘安装
  5. 中文路径改为英文路径
  6. 删除用户目录下的.npmrc
  7. 关闭其他可能占用了该路径该目录的软件
  8. 重启
  9. 重装 node 和 npm
  10. 升级 npm

最后解决办法

其实以上第 3 种方法其实是可行,只是针对于网络环境特殊,无法正常拉包

  1. 注意到以上代码块第一行的一处报错的包名 @ngfed/fc-business
  2. 卸载 npm uninstall @ngfed/fc-busines
  3. 单独重新安装 npm install @ngfed/fc-busines
  4. 全部重新安装 npm install
  5. 成功

原因

安装成功后,我注意到 git 中 packag-lock.json 有变更,变更处是 integrity,这类似于我们平时下载大文件时网站提供的校验码,确保文件没有在下载过程中损坏,确保完整性。
由于周边基建的不完善,我们的 @ngfed/fc-busines 业务组件库开发人员未更新版本号就覆盖发布,导致对应版本的包在,但是校验码却变了,从而在含原有该包的 package-lock.json 的项目重新拉去依赖,拉下来的包与 package-lock.json 中的校验码对不上报错的情况。