起因
公司使用的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.<anonymous> (/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。
网友评论