加快npm安装

我正在尝试在构build过程阶段加速npm安装。 我的package.json有很多包的列表,里面有locking的版本。 我也使用该命令configuration了caching目录

npm config set cache /var/tmp/npm-cache --global 

但是,在试图使用npm install -g --cache进行npm install -g --cache ,我发现这一步并没有像我所期望的那样仅仅从caching中加载软件包来缩短安装时间。 实际上,我怀疑它是否使用本地caching先查找包。

正如@Daniel Serodio所build议的那样

你也可以在你的版本库中包含你的node_modules文件夹,但是你应该首先压缩它,而不是添加到repo中 ,而在安装的时候你可以解压缩它,

  npm rebuild 

(跨平台工作)速度相当快。

这也可以让你完全控制你所有的依赖。

您也可以将进程标志设置为false以将速度提高2倍。

 npm set progress=false 

阅读来源获取更多信息

作为非常现代的解决scheme,您可以开始使用Docker。 Docker允许你虚拟化和预先定义你的代码的当前状态,包括安装的npm-modules和其他好东西。

一旦基础架构/ env的docker映像在本地构build,或者从远程存储库中检索,它将存储在主机上,并且可以在几秒钟内完成服务器的自转。 它的另一个好处是,在部署代码的任何机器上使用相同的虚拟化代码基础架构。 Docker加速安装/部署过程,并被广泛使用的技术。

开始使用docker就足够了(所有的片段都只是模拟/预先设置的示例,并不是最强大/优雅的解决scheme):

  1. 使用手册安装docker和docker-compose,并通过https://www.docker.com/获得一些基本的了解
  2. 在您的应用程序的根目录中写入Dockerfile文件FROM node:6.9.5 RUN mkdir /usr/local/app WORKDIR /usr/local/app COPY package.json package.json RUN npm install

  3. 在你的项目的根目录下用这样的内容创builddocker-compose.yml:
    version: "2" server: hostname: server container_name: server image: server build: . command: sh -c 'NODE_ENV=development PORT=8080 node app.js' ports: - "8080:8080" volumes: #list of folders and files to use - ${PWD}/server:/usr/local/server - ${PWD}/app.js:/usr/local/app.js

  4. 要启动服务器,您需要docker-compose up -d 。 查看日志docker-compose logs -f server 。 如果你将重启你的服务器,那么一旦它已经立刻生成了镜像,它将在几秒钟内完成。 然后它会在本地caching构build层,所以下一次运行只需要几秒钟。

我知道这可能是一个强大的解决scheme,但我相信它有最大的潜力/灵活性,并在工业中广泛使用。 虽然这对于以前没有使用过Docker的人来说,需要一些学习,但是对我来说,这是最适合你的问题。

你也可以在你的版本库中包含你的node_modules文件夹(你可能正在使用git),并且在构build/部署过程中使用npm rebuild (它跨平台),而且速度非常快。

这也可以让你完全控制所有的依赖关系(我知道这就是通常应该使用的缩放包装)

编辑:

你也可以设置进度标志为false, 使你的速度提高至less 20%。 这只适用于npm@v3.xx,并希望尽快修复(请参阅第二个链接)

 npm set progress=false 
  • 关于发现的推文
  • Github问题原因识别

我们一直在试图解决这个问题,以加快我们的部署。

我们已经决定使用pac,遵循其他答案中的原则。 它将npm模块压缩并将它们包含在您的回购站中,因此您的提交和代码评审中没有一百万个文件,只需对目标机器进行解压缩/重build即可。

https://www.npmjs.com/package/pac

没有什么比停用防病毒(我的情况下是Windows Defender)更有帮助,我从2点半到1分钟。 使用npm-cache包,我达到了30秒。 我试图用纱线,这是非常快,但在我的情况下,随机失败。