加快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):
- 使用手册安装docker和docker-compose,并通过https://www.docker.com/获得一些基本的了解
-
在您的应用程序的根目录中写入Dockerfile文件
FROM node:6.9.5 RUN mkdir /usr/local/app WORKDIR /usr/local/app COPY package.json package.json RUN npm install
-
在你的项目的根目录下用这样的内容创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
-
要启动服务器,您需要
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即可。
没有什么比停用防病毒(我的情况下是Windows Defender)更有帮助,我从2点半到1分钟。 使用npm-cache包,我达到了30秒。 我试图用纱线,这是非常快,但在我的情况下,随机失败。
- process.stdout.write / process.stderr.write monkey-patch在subprocess中工作,但不是父进程
- “中止”cassandra结果的阅读
- Express + socket.io:socket.io客户端脚本是404
- res.sendFile强制文件被下载
- 有没有办法在内部写一个Maybe.map的承诺?
- 尝试使用gulp构build安装Semantic UI时,“在严格模式下使用const”错误
- 使用JavaScript从json数据dynamic嵌套ul \ li列表
- 获取node.js套接字closures/结束事件上的远程端点属性
- 如何在节点js中创build相同值的下一个条件