youngwind/blog

利用缓存缩短npm install的时间

youngwind opened this issue · 0 comments

起因

在工作中npm install [package]是家常便饭,但是很多时候装包都消耗不少时间,特别是网络不好的时候。其实每次安装一个包,流程是这样的:

  1. npm从register上面抓包
  2. 放到本地缓存
  3. 从本地缓存解压到node modules

既然曾经安装过的包都在本地了(如图),为什么再次安装的时候不能直接在本地缓存中拷贝过来,从而节省很多时间呢?
2016-02-29 4 08 47

解决办法

1. npm --cache-min

npm自己提供了cache机制,但是并不完善。

(1)如果指定模块不在缓存目录,那么 npm 会连接 registry,下载最新版本。这没有问题,但是如果指定模块在缓存目录之中,npm 也会连接 registry,发出指定模块的 etag ,服务器返回状态码304,表示不需要重新下载压缩包。
(2)如果某个模块已经在缓存之中,但是版本低于要求,npm会直接报错,而不是去 registry 下载最新版本。

2. 其他工具

  1. npm-proxy-cache
  2. local-npm
  3. npm-lazy

三种工具我都试过。
npm-proxy-cache和local-npm都没能成功缩短时间(暂时排除不出来那里的问题),而且local-npm运行的时候会在当前目录生成很多文件。
npm-lazy倒是弄好了,拿express测了一下,不使用缓存需时超过1分钟,使用缓存7秒就可以了。

npm-lazy的使用方法

安装

npm install -g npm_lazy

配置

npm config set registry http://localhost:8080/

启动服务

npm_lazy

参考资料:

  1. http://www.ruanyifeng.com/blog/2016/01/npm-install.html
  2. https://addyosmani.com/blog/using-npm-offline/