当我运行命令时
npm install npm@latest -g
我遇到以下错误:-
npm WARN tar zlib error: unexpected end of file
npm ERR! cb() never called!
npm ERR! This is an error with npm itself. Please report this error at:
npm ERR! <https://github.com/npm/npm/issues>
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\dk\AppData\Roaming\npm-cache\_logs\2018-04-10T03_25_52_880Z-debug.log
我用谷歌搜索并尝试了很多方法,但没有任何效果。
更新答案
使用
npm ci
(归功于Justin Dehorty,请参阅下面的答案)
旧答案
对于任何偶然发现这个问题的人,如果您在
npm install
上遇到相同的错误消息,那么 npm install --no-package-lock
会为我解决它。
正如上面 Mohit Mutha 评论中引用的 Github 问题中所建议的,如果命令在 CI/CD 管道中运行,或者在我的例子中,在 Docker 中运行,则尤其如此。
编辑: 原因是
package-lock.json
文件已存在于您的 Docker 映像或 CI 管道中
我们的团队在 CI 管道中遇到了这个错误。然而,使用
--no-package-lock
的最佳答案实际上会导致 npm 也not 使用现有的 package-lock.json,这绝对不是 CI 所需的行为。相反,现在推荐使用 npm ci
在 CI 中安装,因为它将使用现有的包锁(而不是其他)。
通过运行解决
sudo npm cache clean --force
然后删除package-lock.json和node_modules
然后表演
npm install
仅供参考,我已经浏览了数十个这些回复,以求一次又一次在这里发布的完全相同的问题。我认为大多数回复都是有效的。但就我而言,实际问题是企业代理而不是 npm 本身。
在我的 Dockerifle 中,我必须在运行
http-proxy
之前将 https-proxy
和 npm install
显式添加到我的 npm 配置中,并且它有效。仅供参考,您需要告诉 npm 配置有关您的代理的信息,否则它不会下载依赖项,这就是引发 cb() never called
错误的原因 - 这适用于本地(终端)和 docker 容器。
...
RUN npm config set http-proxy http://mycompanyproxy.mycompany.com:8099
RUN npm config set https-proxy http://mycompanyproxy.mycompany.com:8099
RUN npm install
EXPOSE 3000
CMD ["node", "server"]