Npm、Cnpm、Yarn、Pnpm 各種區別?依賴問題?版本問題?


node-sass 依賴下載失敗問題解決

修改 npm、yarn、pnpm 下載的源即可,以 yarn 為例

 yarn config set sass_binary_site https://mirrors.huaweicloud.com/node-sass/

 Npm簡介

常見的命令解釋:npm install xxx --savenpm install xxx --save-dev  (兩個都是安裝指定的依賴包,前者是會在package.json中的“dependencies”中顯示,在開發環境和生產環境都會被安裝。后者是會在package.json中的“devDependencies”中顯示, 只會在開發環境才會去安裝該依賴包)

例如:eslint相關的依賴包只會在開發環境中配置,所以要注意📢一些只有開發環境才會使用的要使用-dev

版本號問題

 1.2.3   1 代表的就是主版本(主版本的升級一般是重大的變更,相互之間的依賴都會不小的影響,比如: webpackV5 不少構建工具版本不同步會出現進程失敗的問題)   2 代表的就是次版本(一般是些新功能不怎么影響,無感知的)3 代表的補丁版本(bug)

~1.2.3:  "~"代表只更新補丁版本,比如當前:~1.2.0  再次更新 如果有最新的 1.2.3 就會更新到 1.2.3版本  1.3.0則不會自動更新

^1.2.3:  "^"代表更新此版本和補丁版本,比如當前:^1.2.0 再次更新 如果有最新的1.3.2 就會更新到 1.3.2版本  2.0.0則不會自動更新

  1.2.3:什么都不寫就是鎖定版本,指定只是用當前版本不會自動更新最新版本。

package.json 和 package-lock.json

package-lock.json:當前node_modules中的版本就是按照lock.json中的鎖定版本進行安裝的依賴。

npm 舊版本之前是不會生成package-lock.json的,這是之前和yarn區別比較大的地方,因為yarn是有yarn-lock的。(后續npm推出lock后其實和yarn的區別並不是很大了,唯一的區別就是快慢的問題 Yarn是並行安裝依賴的 Npm是串行安裝)

 

 

 

 

這就是版本號和package-lock.json的關聯性,為什么會推出鎖定版本呢?答:為了保證項目的穩定性,防止依賴頻繁更新一些有bug的依賴導致穩定的項目出現問題。

還有就是package-lock.json很大就是因為依賴中還有引用依賴的那種套娃形式,全部都展開了標記上了指定的版本號。

為了統一公司的依賴版本就會將lock.json提交到git上,每次都會拉取下來保持版本的穩定,這個和yarn.lock是同理的。

Yarn和Npm的區別

 

其實上面也說現在唯一的區別就是安裝速度的問題咯(一個並行一個串行),其他問題基本沒什么太大區別了。

Cnpm和Npm的區別

 

說到快的話還有國內的Cnpm(淘寶鏡像),其實就是國內的機房下載文件了,不用FQ去國外下載了。

📢注意:Cnpm 有一個小細節問題,Cnpm是不會生成package-lock.json的,並且也不會去讀取package-lock.json的,所以cnpm安裝依賴的時候會每次都會安裝最新的包。

📢注意:一般情況下是不會出現比較嚴重的問題,比如:antd聖誕彩蛋問題,如果采用鎖定版本的lock可能就不會有問題了。

Pnpm和Npm的區別

 

pnpm也是我們現在主要使用的安裝方式,pnpm和上面的所有的區別就是“快 省”,pnpm是所有安裝方式中安裝速度最快的。

不會重復安裝同一個包,用 npm/yarn 的時候,如果 100 個項目都依賴 lodash,那么 lodash 很可能就被安裝了 100 次,磁盤中就有 100 個地方寫入了這部分代碼。但在使用 pnpm 只會安裝一次,磁盤中只有一個地方寫入,后面再次使用都會直接使用。

node_modules中的文件目錄也是非常清晰的,這是和上面那幾種生成的方式都是不同的。

還有就是支持monorepo的開發形式,后續可以再出一份關於Monorepo的項目管理方式的文章。(Vue3 源碼就是采用的Monorepo的項目管理形式開發的)

其他的基本上和上方的內容信息保持一致的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM