平常開發反覆使用npm install的時候太多了,而大多數時候它又很是的慢。因此動手研究一下如何優化。node
先找到兩個影響速度的瓶頸:git
網絡鏈接問題。github
NPM install的機制問題。npm
別名法小程序
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-proxy-cache工具
local-npm: https://github.com/nolanlawso...優化
npm-lazy
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
沒有離線模式,必須訪問網絡
順序執行,效率差
解決離線和緩存的方法有:
上面提到的local-npm,至關於本地搭建一個registry鏡像
替換npm install,例如,npm-cache 等
--cache-min: 這個參數能夠強制使用本地緩存,例如,
npm install --cache-min 999 xx // 強制優先使用本地999分鐘內的緩存
這種方法的缺點有兩點;
1. 若是緩存中有對應的包依然須要發送Etag驗證是否須要更新。 2. 若是緩存中有版本不對應的包則直接報錯。(而不是下載正確的包)
yarn是facebook推出的解決方案,貌似也獲得了npm的官方支持。解決了npm的主要問題,但網絡鏈接問題依然須要切換registry來實現。