加速NPM

平常開發反覆使用npm install的時候太多了,而大多數時候它又很是的慢。因此動手研究一下如何優化。node

先找到兩個影響速度的瓶頸:git

  1. 網絡鏈接問題。github

  2. NPM install的機制問題。npm

1. 解決網絡鏈接問題。

使用更快的registry鏡像。方法不少主要分爲三類:

  • 別名法小程序

alias cnpm="npm --registry=https://registry.npm.taobao.org
  • 配置文件法緩存

npm config set registry https://registry.npm.taobao.org
  • 直接用第三方的npm服務器

npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install

提示: 可使用一些小工具進行切換,例如nrv網絡

$npm install -g nrm

$nrm ls
* npm -----  https://registry.npmjs.org/
  cnpm ----  http://r.cnpmjs.org/
  taobao --  https://registry.npm.taobao.org/
  nj ------  https://registry.nodejitsu.com/
  rednpm -- http://registry.mirror.cqupt.edu.cn
  skimdb -- https://skimdb.npmjs.com/registry
  
$nrm use taobao

使用本地緩存的npm鏡像。

可能的問題:

1.沒法npm publish。
由於publish頻次不高,須要的時候切換回npm的官方registry就能夠了。

2.自動選擇問題
有的一套腳本可能會在國內和國外不一樣的服務器上運行,例如CI服務器在國外實際開發和部署在國內。這個時候就須要自動的選擇合適的registry。

我本身寫了個小程序來支持這種場景,https://github.com/guolin/ufnr
自己依賴不多下載快,並可以根據不一樣的環境切換合適的registry。 以爲好給個星 :)

$ npm install -g ufnr
$ ufnr
current registry is https://registry.npm.taobao.org

2. npm機制問題

  • 沒有離線模式,必須訪問網絡

  • 順序執行,效率差

解決離線和緩存的方法有:

  1. 上面提到的local-npm,至關於本地搭建一個registry鏡像

  2. 替換npm install,例如,npm-cache 等

  3. --cache-min: 這個參數能夠強制使用本地緩存,例如,

npm install --cache-min 999 xx
// 強制優先使用本地999分鐘內的緩存

這種方法的缺點有兩點;

1. 若是緩存中有對應的包依然須要發送Etag驗證是否須要更新。
2. 若是緩存中有版本不對應的包則直接報錯。(而不是下載正確的包)

3. 終極解決方案

yarn是facebook推出的解決方案,貌似也獲得了npm的官方支持。解決了npm的主要問題,但網絡鏈接問題依然須要切換registry來實現。

相關文章
相關標籤/搜索