前段时间我在构建机器上遇到了npm缓存问题。我们不时手工做npm cache clean
,这解决了我们仍然不确定导致它们的原因的各种问题。所以经过一段时间我们在所有构建脚本中都包含了npm cache clean
,从那时起我们就没有npm i
的神秘问题,但是现在并行构建显然会相互影响。
对我来说,最好的解决方案似乎是完全关闭了npm缓存机制,但我找不到如何做到这一点。
答案 0 :(得分:12)
根据npm-config的记录:
力§ 默认值:false 类型:布尔 使各种命令更加强大。
- 生命周期脚本故障不会阻止进度。
- 发布Clobbers先前发布的版本。
- 从注册表中请求时跳过缓存。
- 防止检查是否破坏了非npm文件。
也许使用-f
/ --force
是禁用npm缓存的最简单方法。
npm install --force
答案 1 :(得分:1)
就我而言,在用于构建(Windows)的VM上运行“ npm install”的多个实例时,我遇到了类似的问题
由于它是仅用于构建的VM,因此没有其他程序可以锁定文件。我尝试禁用了各种无效的防病毒设置。 “ npm缓存清除”和“ npm缓存验证”有效,但是对我来说这不是一个正确的解决方案,因为我无法猜测何时有人会针对不同的发行版/环境从Jenkins触发构建作业,从而导致“ npm install”的多个实例,因此我无法将其添加到构建脚本中,也无法每次都登录到VM并手动清除/删除缓存文件夹。
最后,经过一番研究,我最终使用以下命令为每个作业使用单独的缓存路径运行“ npm install”:
npm install --cache path/to/some/folder
由于所有同时运行的作业现在具有单独的缓存路径,而不是公用的全局路径(Users / AppData / Roaming /),因此此问题已解决,因为作业不再尝试锁定和访问相同的文件,来自公共npm缓存。
请注意,您可以安装具有缓存路径的单个软件包,如下所示:
npm install packageName --cache path/to/some/folder
我无法在npm文档中找到这种提供高速缓存路径的方法,但是我尝试了一下并成功了。 我正在使用npm6,自从npm5以来,它好像在评论中提到了@ArchNoob一样