首发于 语雀文档@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 安装依赖
干货正文
本想详细记录不断尝试的过程与分析,但时间有限,不说过多的无效答案,我大概尝试过以下处理方案:
- 删除依赖重新安装
- 删除依赖并清空 npm 缓存后重新安装
- 删除 lock 文件重新安装(失去了具体 lock 版本控制,由于内网代理有问题,无 lock 后无法拉取内网 npm 仓库没有的最新包)
- 切换到非系统盘安装
- 中文路径改为英文路径
- 删除用户目录下的.npmrc
- 关闭其他可能占用了该路径该目录的软件
- 重启
- 重装 node 和 npm
- 升级 npm
最后解决办法
其实以上第 3 种方法其实是可行,只是针对于网络环境特殊,无法正常拉包
- 注意到以上代码块第一行的一处报错的包名 @ngfed/fc-business
- 卸载 npm uninstall @ngfed/fc-busines
- 单独重新安装 npm install @ngfed/fc-busines
- 全部重新安装 npm install
- 成功
原因
安装成功后,我注意到 git 中 packag-lock.json 有变更,变更处是 integrity,这类似于我们平时下载大文件时网站提供的校验码,确保文件没有在下载过程中损坏,确保完整性。
由于周边基建的不完善,我们的 @ngfed/fc-busines 业务组件库开发人员未更新版本号就覆盖发布,导致对应版本的包在,但是校验码却变了,从而在含原有该包的 package-lock.json 的项目重新拉去依赖,拉下来的包与 package-lock.json 中的校验码对不上报错的情况。