npm改成淘寶鏡像與cnpm區別
之前一直以為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 install lodash,然後手動刪除cnpm安裝的兩個包中其中一個即下劃線(非正常名字)的包,剩餘的那個包,發現無法通過鼠標點擊打開了。然後在文件中require會報錯,提示沒有這個包。

- 所以,cnpm安裝的的2個模塊,兩者應該存在引用關係,正常名字模塊是非正常名字模塊的索引,兩者都必須存在才可以使用。但是npm安裝下來就不存在這種情況了,因為只有一個正常名字模塊。
- 實測發現,儘管使用npm改成淘寶倉庫,發現安裝速度還是遠遠比cnpm慢(當模塊比較多的時候)。可能應該和cnpm安裝的文件結構有關係吧。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/280056.html