【发布时间】:2018-04-02 20:38:30
【问题描述】:
我们都知道使用 npm 下载依赖项可能非常耗时,尤其是当我们受限于旧的 npm 版本时。
对我来说,作为一名开发人员,这没什么大不了的,因为我不得不在我的本地开发机器上执行此操作的次数非常少,而且一切都与我项目文件夹中的 node_modules 缓存一起工作。但现在我想通过 Jenkins 将这些应用程序带到 CI 环境中。
我意识到在使用 npm 下载依赖项上花费了大量时间。这是一个问题,因为:
npm 下载项目文件夹中的依赖项,而不是 Maven 的 /home/user/.m2 等全局文件夹
我必须在每次运行时清理 Jenkins 工作区文件夹以避免 git checkout 出现问题。
我想要一个非常优雅的解决方案来缓存我的 Jenkins slave 上的 npm 依赖项,但到目前为止我只能想到:
从 Jenkins 工作区中删除除 node_modules 文件夹之外的所有内容。我不喜欢这样,因为如果我继续为我的项目创建分支,我可能会消耗大量的 HDD。每个分支都会创建一个工作区。
在每次 npm 安装后执行
cp ./node_modules /home/npm_cache之类的操作,然后在代码签出后执行cp /home/npm_cache ./node_modules之类的操作。
我觉得这些解决方案很糟糕。必须有更好的方法来做到这一点。
【问题讨论】:
-
我不确定在您的情况下下载 NPM 依赖项需要多长时间,但我们通过在中间添加 Nexus 作为代理管理器而不是每次都从 Internet 下载依赖项来最大限度地减少时间。当然,您提到的选项也普遍遵循。
-
您找到更好的解决方案了吗? npm 下载占用了我们构建时间的一半以上 :(
标签: node.js caching jenkins dependencies