1.需求由來
由于node安裝插件是從國外服務器下載愈魏,受網(wǎng)絡影響大,速度慢且可能出現(xiàn)異常。所以如果npm的服務器在中國就好了喷斋,所以我們樂于分享的淘寶團隊(阿里巴巴旗下業(yè)務阿里云)干了這事。來自官網(wǎng):“這是一個完整 npmjs.org 鏡像蒜茴,你可以用此代替官方版本(只讀)星爪,同步頻率目前為 10分鐘 一次以保證盡量與官方服務同步。
也就是說我們可以使用阿里布置在國內(nèi)的服務器來進行node安裝粉私。
2.使用方法
1.使用阿里定制的 cnpm 命令行工具代替默認的 npm顽腾,輸入下面代碼進行安裝:
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
2.檢測cnpm版本,如果安裝成功可以看到cnpm的基本信息诺核。
cnpm -v
3.以后安裝插件只需要使用cnpm intall
即可
假如我已經(jīng)習慣了
npm install
的安裝方式抄肖,我不想去下載阿里的cnpm命令工具將命令變成cnpm怎么辦?很容易我們想到窖杀,我直接將node的倉庫地址改成淘寶鏡像的倉庫地址不就好了嗎漓摩?
3.單次使用
npm install --registry=https://registry.npm.taobao.org
4.永久使用
設置成全局的下載鏡像站點,這樣每次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,是不是很爽!雖然實際都是使用的是淘寶鏡像卓舵。
最后附上淘寶鏡像官網(wǎng)地址:http://npm.taobao.org/
注:如果想還原npm倉庫地址南用,只需再把地址配置成npm鏡像就可以了
npm config set registry https://registry.npmjs.org/
5.npm改成淘寶鏡像與cnpm區(qū)別(20190509新增)
之前一直以為npm改成淘寶鏡像后和cnpm本質(zhì)是一樣的,今天在研究package-lock.json時候發(fā)現(xiàn)边器,這兩者還是有很大區(qū)別训枢。特記錄下:
先貼下截圖對比:
1.使用cnpm安裝lodash
2.使用改成淘寶倉庫的npm安裝lodash
通過截圖會發(fā)現(xiàn):
cnpm安裝模塊的時候會在node_modules文件夾生成二個文件夾,一個以下劃線 _開頭以及版本號組成的名字忘巧,一個正常名字的模塊恒界,文件夾名字雖然不一樣,但里面文件是一樣的砚嘴。
比如執(zhí)行cnpm install lodash,會在node_modules文件夾下生成兩個文件夾:_lodash@4.17.11@lodash和lodash十酣,先執(zhí)行了cnpm install lodash,然后再執(zhí)行npm install lodash际长,npm安裝的lodash會替換掉cnpm安裝的lodash包(包括以下劃線開頭那個包)耸采,文件夾會只剩一個npm先安裝的lodash包。再次npm uninstall lodash或者cnpm uninstall lodash,都會刪除lodash包工育,此時插件包就變成空文件夾了虾宇。
-
先執(zhí)行了cnpm install lodash,然后再執(zhí)行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會報錯,提示沒有這個包扼脐。
- 先執(zhí)行了cnpm install lodash岸军,然后手動刪除cnpm安裝的兩個包中其中一個即下劃線(非正常名字)的包,剩余的那個包瓦侮,發(fā)現(xiàn)無法通過鼠標點擊打開了艰赞。然后在文件中require會報錯,提示沒有這個包肚吏。
所以猖毫,cnpm安裝的的2個模塊,兩者應該存在引用關系须喂,正常名字模塊是非正常名字模塊的索引吁断,兩者都必須存在才可以使用。但是npm安裝下來就不存在這種情況了坞生,因為只有一個正常名字模塊仔役。
實測發(fā)現(xiàn),盡管使用npm改成淘寶倉庫是己,發(fā)現(xiàn)安裝速度還是遠遠比cnpm慢(當模塊比較多的時候)∽浞希可能應該和cnpm安裝的文件結(jié)構(gòu)有關系吧沛厨。