2者區別對比分析「cnpm與npm有什麼區別」

npm改成淘寶鏡像與cnpm區別

之前一直以為npm改成淘寶鏡像後和cnpm本質是一樣的,今天在研究package-lock.json時候發現,這兩者還是有很大區別。特記錄下:

先貼下截圖對比:

1.使用cnpm安裝lodash

npm改成淘寶鏡像與cnpm就是一樣的了嗎?

2.使用改成淘寶倉庫的npm安裝lodash

npm改成淘寶鏡像與cnpm就是一樣的了嗎?

通過截圖會發現:

  • 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會報錯,提示沒有這個包。
npm改成淘寶鏡像與cnpm就是一樣的了嗎?
  • 所以,cnpm安裝的的2個模塊,兩者應該存在引用關係,正常名字模塊是非正常名字模塊的索引,兩者都必須存在才可以使用。但是npm安裝下來就不存在這種情況了,因為只有一個正常名字模塊。
  • 實測發現,儘管使用npm改成淘寶倉庫,發現安裝速度還是遠遠比cnpm慢(當模塊比較多的時候)。可能應該和cnpm安裝的文件結構有關係吧。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/280056.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-20 18:54
下一篇 2024-12-20 18:54

相關推薦

發表回復

登錄後才能評論