NPM持续集成的最佳实践

时间:2016-08-25 07:08:28

标签: npm

我正在使用基于NPM的工具(grunt)构建HTML5前端。

我的持续集成构建过程的第一步是运行npm install

npm install SLOW 。即使使用本地NPM代理缓存工件(Sonatype的Nexus 3),它仍然需要4分钟!

$> time npm install
real    4m17.427s
user    0m0.170s
sys     0m0.290s

如果我按照惯常的最佳实践进行持续集成,我将从一个原始的SCM存储库开始运行构建。这意味着,每次CI构建都必须进行新的npm install并承担4分钟的费用。

这是我构建时间的重要比例。我不满意这种构建需要很长时间。

替代方案似乎是在构建之间保持node_modules。但是,我遇到了构建变得不稳定的问题。

package.json删除依赖关系并不会使用简单的node_modules将其从npm install中删除。我可以首先使用npm prune解决此问题。

这里被认为是最佳做法?

5 个答案:

答案 0 :(得分:1)

考虑到为了构建您必须安装新软件包,您别无选择,只能调用install。至于原始,我坚信他们是指“构建”过程而不是“依赖管理”过程。

为什么他们不一样?让我们通过一个例子来说明它。

  

作为开发人员,当你第一次开始工作时,你必须“安装”   能够编码的软件。这通常做一次。   之后,您可以开始编码。后者是“构建”部分   因为您为代码生成的每个功能生成了价值。从   有时,您可以通过删除,添加或更新工具列表来更新工具列表。

在这个例子中,在开始编码之前每天安装工具都会很糟糕。

我建议您确保构建过程(即生成工件(例如Jar))与依赖项安装过程分离。意味着安装完成一次,建筑可以毫无困难地进行。你没有提到将要建造的东西,但是咕噜声可以肯定地完成其余的工作。

因此,我认为修剪和安装是一个很好的策略。你不应该担心第一次。把它想象成一个冷酷的开始。任何使用子组件作为管道一起工作的系统都有这个“问题”。以汽车为例。当你开始它时,它会像你在一小时后开车时一样省油。

答案 1 :(得分:0)

安排每日作业以构建包含依赖项的docker容器。在最新的容器中运行CI作业。伪像CI作业的构建。

答案 2 :(得分:0)

您应该在本地计算机或本地网络中离线安装npm个软件包,您可以在这里找到一些提示=> Offline installation of npm packages

答案 3 :(得分:0)

您是否考虑过使用npm link甚至是整个node_modules文件夹的符号链接? 至少npm链接可用于您的dev依赖项,您通常需要服务器上的受控版本。这应该可以加快速度。

答案 4 :(得分:0)

自2018年3月5日和npm 5.7.1起,您可以使用npm ci。这比常规的npm install快得多,因为它忽略了一些用户友好的功能并为无用户CI环境安装了软件包。