pnpm 是什么桶良?和 npm 什么關(guān)系?
現(xiàn)代前端開發(fā)中離不開 npm沮翔, npm 是 Node Package Manager 的縮寫陨帆,顧名思義就是 Node 包管理器,我們使用它發(fā)布采蚀、安裝和卸載 NodeJS 包疲牵。
那最近很火的 pnpm 是啥呢?跟 npm 有什么關(guān)系榆鼠?
首先解讀一下他的名字纲爸,根據(jù)官方介紹,p
就是 performance(性能卓越的妆够、高性能的) 的意思识啦,npm
就是我們剛才提到的 npm。pnpm 就等于 Performance Node Package Manager神妹。是的颓哮,就是這么豪橫。他能完全代替 npm鸵荠,并且安裝速度更快冕茅、占用磁盤更小。
根據(jù)測試數(shù)據(jù),pnpm 比 npm 和 yarn 快 2 倍姨伤。
站在 yarn 的肩膀上
yarn 是 facebook 聯(lián)合有其他一些公司在 npm v3 版本時推出的一個新的開源的包管理器哨坪,它的出現(xiàn)是為了彌補 npm 當時安裝速度慢、依賴包版本不一致等問題姜挺。
yarn 跟當時的 npm 相比有以下優(yōu)點:
-
安裝速度快
npm 是按照隊列依次安裝每個 package齿税,當前一個 package 安裝完成之后彼硫,才能繼續(xù)后面的安裝炊豪。而 Yarn 是同步執(zhí)行所有任務(wù)。而且拧篮,如果一個 package 之前已經(jīng)安裝過词渤,yarn 會直接從緩存中獲取,而不是重新下載串绩。
-
統(tǒng)一包版本
yarn 還創(chuàng)新性的新增了
yarn.lock
文件缺虐,它是 yarn 在安裝依賴包時,自動生成的一個文件礁凡,作用是記錄 yarn 安裝的每個 package 的版本高氮,保證之后 install 時的版本一致。不過隨著后來 npm 也新增了作用相同的 package-lock.json顷牌,這個優(yōu)勢已經(jīng)不太明顯剪芍。
-
節(jié)省磁盤空間
我們知道,包的安裝方法是從服務(wù)器上下載到本地窟蓝,寫入到 node_modules 文件夾罪裹,而每個包又有自己的 依賴,也會有 node_modules 文件夾运挫,所以當一個 package 在不同的依賴項中需要時状共,它會被多次復制粘貼并生成多份文件,形成一個很深的依賴樹谁帕。
而 yarn 會將相同的依賴提升到最頂層峡继,而不是每個包下都存在一個相同的副本。
但是 yarn 足夠完美了嗎匈挖?它雖然解決了很多問題鬓椭,但還遠遠不夠,此時 yarn 和 npm 還存在兩個明顯的問題:
如果一個包卸載关划,那么他相關(guān)的依賴也會被卸載(沒有在項目中 package.json 中聲明的)小染,這就有可能卸載項目中還在使用過的包。
當一個包有多個版本的時候贮折,只會提升一個裤翩,其余版本的包還會存在重復安裝的情況。
更快、更輕
2017 年 pnpm 正式發(fā)布踊赠,不過直到最近兩年他才大火呵扛。 相比較于 yarn,pnpm 在性能上又有了極大的提升筐带。它解決了 npm今穿、yarn 重復文件過多、復用率低等問題伦籍。
pnpm 內(nèi)部使用基于內(nèi)容尋址的文件系統(tǒng)來存儲磁盤上所有的文件蓝晒,這個文件系統(tǒng)出色的地方在于:
同一個包只會安裝一次,磁盤中只有一個地方寫入帖鸦,后面再次使用都會直接使 hardlink芝薇。即使一個包的不同版本,pnpm 也會極大程度地復用之前版本的代碼作儿。舉個例子洛二,比如 lodash 有 100 個文件,更新版本之后多了一個文件攻锰,那么磁盤當中并不會重新寫入 101 個文件,而是保留原來的 100 個文件的 hardlink娶吞,僅僅寫入那一個新增的文件。
如何使用 pnpm
pnpm 的命令和 npm寝志、yarn 基本類似,下面我列舉一個常用的和 npm材部、yarn 等價的命令毫缆,供大家參考苦丁,其中 [package]
代表包名:
- | npm | yarn | pnpm |
---|---|---|---|
Install all | npm install | yarn | pnpm install |
Install | npm install [package] | yarn add [package] | pnpm add [package] |
npm install [package] -D | yarn add [package] -D | pnpm add -D [package] | |
npm install [package] -g | yarn global add [package] | pnpm add -g [package] | |
Uninstall | npm uninstall [package] | yarn remove [package] | pnpm remove [package] |
Update | npm update [package] | yarn upgrade [package] | pnpm update [package] |
更多命令可以點擊官網(wǎng)的命令列表查看。
參考資料: