因爲node安裝插件是從國外服務器下載,受網絡影響大,速度慢且可能出現異常。因此若是npm的服務器在中國就行了,因此咱們樂於分享的淘寶團隊(阿里巴巴旗下業務阿里雲)幹了這事。來自官網:「這是一個完整 npmjs.org 鏡像,你能夠用此代替官方版本(只讀),同步頻率目前爲 10分鐘 一次以保證儘可能與官方服務同步。java
也就是說咱們可使用阿里佈置在國內的服務器來進行node安裝。node
1.使用阿里定製的 cnpm 命令行工具代替默認的 npm,輸入下面代碼進行安裝:git
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
2.檢測cnpm版本,若是安裝成功能夠看到cnpm的基本信息。express
cnpm -v
3.之後安裝插件只須要使用cnpm intall
便可npm
假如我已經習慣了
npm install
的安裝方式,我不想去下載阿里的cnpm命令工具將命令變成cnpm怎麼辦?很容易咱們想到,我直接將node的倉庫地址改爲淘寶鏡像的倉庫地址不就行了嗎?json
npm install --registry=https://registry.npm.taobao.org
設置成全局的下載鏡像站點,這樣每次install的時候就不用加--registry,默認會從淘寶鏡像下載,設置方法以下:服務器
1.打開.npmrc文件(nodejs\node_modules\npm\npmrc,沒有的話可使用git命令行建一個( touch .npmrc),用cmd命令建會報錯) 2.增長 registry =https://registry.npm.taobao.org 便可。
也能夠按以下方式直接在命令行設置網絡
npm config set registry https://registry.npm.taobao.org
檢測是否成功工具
// 配置後可經過下面方式來驗證是否成功 npm config get registry // 或 npm info express
這樣,咱們可使用淘寶鏡像還不用更換成cnpm,是否是很爽!雖然實際都是使用的是淘寶鏡像。
最後附上淘寶鏡像官網地址:http://npm.taobao.org/ui
注:若是想還原npm倉庫地址,只需再把地址配置成npm鏡像就能夠了
npm config set registry https://registry.npmjs.org/
以前一直覺得npm改爲淘寶鏡像後和cnpm本質是同樣的,今天在研究package-lock.json時候發現,這二者仍是有很大區別。特記錄下:
先貼下截圖對比:
1.使用cnpm安裝lodash
2.使用改爲淘寶倉庫的npm安裝lodash
經過截圖會發現:
cnpm安裝模塊的時候會在node_modules文件夾生成二個文件夾,一個如下劃線 _開頭以及版本號組成的名字,一個正常名字的模塊,文件夾名字雖然不同,但裏面文件是同樣的。
好比執行cnpm install lodash,會在node_modules文件夾下生成兩個文件夾:_lodash@4.17.11@lodash和lodash,
先執行了cnpm install lodash,而後再執行npm install lodash,npm安裝的lodash會替換掉cnpm安裝的lodash包(包括如下劃線開頭那個包),文件夾會只剩一個npm先安裝的lodash包。再次npm uninstall lodash或者cnpm uninstall lodash,都會刪除lodash包,此時插件包就變成空文件夾了。
先執行了cnpm install lodash,而後再執行npm uninstall lodash後,此時會報錯
npm ERR! code EINVALIDPACKAGENAME
npm ERR! Invalid package name "_lodash@4.17.11@lodash": name cannot start with an underscore; name can only contain URL-friendly characters
可是使用cnpm uninstall lodash後,不會報錯,此時會刪掉cnpm安裝的兩個包中其中一個即非下劃線(正常名字)的包。剩餘的那個包是能夠正常經過鼠標點擊打開的。而後在文件中require會報錯,提示沒有這個包。
因此,cnpm安裝的的2個模塊,二者應該存在引用關係,正常名字模塊是非正常名字模塊的索引,二者都必須存在纔可使用。可是npm安裝下來就不存在這種狀況了,由於只有一個正常名字模塊。
實測發現,儘管使用npm改爲淘寶倉庫,發現安裝速度仍是遠遠比cnpm慢(當模塊比較多的時候)。可能應該和cnpm安裝的文件結構有關係吧。