npm私有仓库缓存错误导致 npm install 失败

起因

公司使用的Artifactory搭建私有npm仓库,同时代理缓存阿里云npm仓库,以加速公司内install的速度。通过使用缓存,尤其是用了npm ci 后,install一般20s就能完成。

然而,今天有项目提出devops 在打包时,install 失败,输出如下:

$ npm i

npm ERR! code EINTEGRITY
npm ERR! sha1-rzGBwlFov+nYbY/7xwM7+eSE/oQ= integrity checksum failed when using sha1: wanted sha1-rzGBwlFov+nYbY/7xwM7+eSE/oQ= but got sha512-BoBZjmToPCftCRB7eAcTXG9p0OlnnOT2k5+6KP0orTpWWZ+cDZc+HsOXaaGrUO4XHB4cMHUGlQmis667Girysg== sha1-q0VecamF46Gb99aS8+3RjGlXEIc=. (652 bytes)

分析

看输出日志内容是校验失败,百度一下原因,可能是本地npm缓存的文件不完整,通过以下命令可以清除本地缓存。

npm cache verify

然而并不起作用,说明本地缓存正常。那出问题的应该是私有仓库,切换仓库install,果然可以正常安装。那重点就是找到私库中的错误文件。

npm install  --registry=https://registry.npm.taobao.org

排查

要排查npm install问题,可以使用下面命令:

npm i -d
npm i -dd
npm i -ddd

输出随着d的数量增加,输出日志也会变得愈加详细。但是 -ddd,由于太详细反而抓不到重点了。

npm http fetch GET 304 https://artifactory.vashre.net/api/npm/dt-npm-public/vue-async-computed 356ms (from cache)
npm verb stack Error: sha1-rzGBwlFov+nYbY/7xwM7+eSE/oQ= integrity checksum failed when using sha1: wanted sha1-rzGBwlFov+nYbY/7xwM7+eSE/oQ= but got sha512-BoBZjmToPCftCRB7eAcTXG9p0OlnnOT2k5+6KP0orTpWWZ+cDZc+HsOXaaGrUO4XHB4cMHUGlQmis667Girysg== sha1-q0VecamF46Gb99aS8+3RjGlXEIc=. (652 bytes)
npm verb stack     at Transform. (/Users/tim/.nvm/versions/node/v14.16.1/lib/node_modules/npm/node_modules/ssri/index.js:328:19)
npm verb stack     at Transform.emit (events.js:327:22)
npm verb stack     at endReadableNT (internal/streams/readable.js:1327:12)
npm verb stack     at processTicksAndRejections (internal/process/task_queues.js:80:21)
npm verb cwd /Users/tim/code/cm-alm-h5
npm verb Darwin 19.4.0
npm verb argv "/Users/tim/.nvm/versions/node/v14.16.1/bin/node" "/Users/tim/.nvm/versions/node/v14.16.1/bin/npm" "install" "-dd"
npm verb node v14.16.1
npm verb npm  v6.14.12
npm ERR! code EINTEGRITY
npm ERR! sha1-rzGBwlFov+nYbY/7xwM7+eSE/oQ= integrity checksum failed when using sha1: wanted sha1-rzGBwlFov+nYbY/7xwM7+eSE/oQ= but got sha512-BoBZjmToPCftCRB7eAcTXG9p0OlnnOT2k5+6KP0orTpWWZ+cDZc+HsOXaaGrUO4XHB4cMHUGlQmis667Girysg== sha1-q0VecamF46Gb99aS8+3RjGlXEIc=. (652 bytes)

-dd 输出日志中可以看到是vue-async-computed包有问题。去Artifactory中找到这个包,删除掉,再本地重新install,问题解决!

后记

npm 的文档也没有介绍 -dd , 根据堆栈溢出的解释

d   = --loglevel debug 
dd  = --loglevel verbose
ddd = --loglevel silly

顺便还有

npm list 
npm list --depth=0

另外还有个npm install时候,修改git地址的 git config --unset url.https://github.com/.insteadof* ,是npm和cocopods下载github依赖的一个解决思路吧,嗯,还有go get。

你可能感兴趣的:(npm私有仓库缓存错误导致 npm install 失败)