禁用npm缓存

Tam*_*dus 12 node.js npm

前段时间我在构建机器上遇到了npm缓存问题.我们不时需要npm cache clean手工完成,这解决了我们仍然不确定导致它们的原因的各种问题.所以经过一段时间我们包含npm cache clean在我们所有的构建脚本中,从那以后我们没有遇到神秘的问题npm i,但是现在并行构建显然会相互影响.

对我来说,最好的解决方案似乎完全关闭了npm缓存机制,但我无法找到如何做到这一点.

nil*_*ptr 12

正如npm-config记录的那样:

force§ 默认值:false 类型:Boolean 使各种命令更有力。

  1. 生命周期脚本失败不会阻止进度。
  2. 发布clobbers以前发布的版本。
  3. 从注册表请求时跳过缓存。
  4. 防止检查破坏非 npm 文件。

也许使用-f/--force是禁用 npm 缓存的最简单方法。

npm install --force
Run Code Online (Sandbox Code Playgroud)

  • 标志 --force 不会在您认为会跳过的上下文中跳过缓存。它仍然首先将包加载到文件系统上 (2认同)

Dan*_* D. 11

您可以通过为一系列npm命令创建新目录并将其cache设置为该空目录然后删除该目录来解决并行构建的问题.喜欢:

export npm_config_cache=$(mktemp -d) 
npm ...
...
rm -rf $npm_config_cache
Run Code Online (Sandbox Code Playgroud)

这将消除对npm cache clean总是以空缓存开始的需要.

  • 与在`npm @ 5`上一样,不需要导出env var,您可以改为运行`npm install --cache / path / to / cache`,然后稍后轻松将其删除。 (3认同)

Luk*_*sac 7

就我而言,我在用于构建的 VM 上运行多个“npm install”实例时遇到了类似的问题(Windows)

由于它是一个仅用于构建的 VM,因此没有其他程序锁定文件。我尝试禁用各种无效的防病毒设置。“npm 缓存清除”和“npm 缓存验证”有效,但对我来说这不是一个正确的解决方案,因为我无法猜测何时有人会从 Jenkins 为不同的版本/环境触发构建作业,从而导致多个“npm install”实例,因此我无法将其添加到构建脚本中,也无法登录 VM 并每次手动清除/删除缓存文件夹。

最后,经过一番研究,我最终使用以下命令为每个作业运行了带有单独缓存路径的“npm install”:

npm install --cache path/to/some/folder
Run Code Online (Sandbox Code Playgroud)

由于所有同时运行的作业现在有一个单独的缓存路径而不是通用的全局路径 (Users/AppData/Roaming/),这个问题得到了解决,因为作业不再试图锁定和访问同一个文件,来自常见的 npm 缓存。

请注意,您可以使用缓存路径安装单个包,如下所示:

npm install packageName --cache path/to/some/folder
Run Code Online (Sandbox Code Playgroud)

我无法在 npm 文档中找到这种提供缓存路径的方法,但我试了一下,它奏效了。我正在使用 npm6 并且看起来它从 npm5 开始工作,正如评论中提到的@ArchNoob