日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

pnpm初探

發(fā)布時間:2024/4/24 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 pnpm初探 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

pnpm 的優(yōu)點

它解決了 npm/yarn 平鋪 node_modules 帶來的依賴項重復的問題 (doppelgangers)

假設存在依賴依賴:

.  
├── package-a  
│   └── lodash@4.0.0  
├── package-b  
│   └── lodash@4.0.0  
├── package-c  
│   └── lodash@3.0.0  
└── package-d  
    └── lodash@3.0.0  

那么不可避免地在 npm 或者 yarn 中,lodash@3.0.0 會被多次安裝,無疑造成了空間的浪費與諸多問題。

./node_modules/package-a  
./node_modules/package-b  
./node_modules/package-c  
./node_modules/package-c/node_mdoules/lodash  
./node_modules/package-d  
./node_modules/package-d/node_mdoules/lodash  

這是一個較為常見的場景,在平時項目中有些庫相同版本甚至會安裝七八次,如 postcssansi-stylesansi- regexbraces 等,你們可以去你們的 yarn.lock/package-lock.json 中搜索一下。

而在 pnpm 中,它改變了 npm/yarn 的目錄結構,采用軟鏈接的方式,避免了 doppelgangers 問題更加節(jié)省空間。

它最終生成的 node_modules 如下所示,從中也可以看出它解決了幽靈依賴的問題。

./node_modules/package-a       ->  .pnpm/package-a@1.0.0/node_modules/package-a  
./node_modules/package-b       ->  .pnpm/package-b@1.0.0/node_modules/package-b  
./node_modules/package-c       ->  .pnpm/package-c@1.0.0/node_modules/package-c  
./node_modules/package-d       ->  .pnpm/package-d@1.0.0/node_modules/package-d  
./node_modules/.pnpm/lodash@3.0.0  
./node_modules/.pnpm/lodash@4.0.0  
./node_modules/.pnpm/package-a@1.0.0  
./node_modules/.pnpm/package-a@1.0.0/node_modules/package-a  
./node_modules/.pnpm/package-a@1.0.0/node_modules/lodash     -> .pnpm/package-a@1.0.0/node_modules/lodash@4.0.0  
./node_modules/.pnpm/package-b@1.0.0  
./node_modules/.pnpm/package-b@1.0.0/node_modules/package-b  
./node_modules/.pnpm/package-b@1.0.0/node_modules/lodash     -> .pnpm/package-b@1.0.0/node_modules/lodash@4.0.0  
./node_modules/.pnpm/package-c@1.0.0  
./node_modules/.pnpm/package-c@1.0.0/node_modules/package-c  
./node_modules/.pnpm/package-c@1.0.0/node_modules/lodash     -> .pnpm/package-c@1.0.0/node_modules/lodash@3.0.0  
./node_modules/.pnpm/package-d@1.0.0  
./node_modules/.pnpm/package-d@1.0.0/node_modules/package-d  
./node_modules/.pnpm/package-d@1.0.0/node_modules/lodash     -> .pnpm/package-d@1.0.0/node_modules/lodash@3.0.0  

如此,依賴 軟鏈接 的方式,可解決重復依賴安裝 (doppelgangers) 的問題,「如果一個項目占用 1000 MB,那么使用 pnpm
可能僅占用 800 MB」

然而它除此之外,還有一個最大的好處,「如果一個項目占用 1000 MB,傳統(tǒng)方式十個項目占用 10000 MB,那么使用 pnpm 可能僅占用 3000
MB」,而它得益于硬鏈接。

再借用以上示例,lodash@3.0.0lodash@4.0.0 會生成一個指向全局目錄的硬鏈接,如果新項目依賴二者,則可復用存儲空間。

./node_modules/.pnpm/lodash@3.0.0   -> hardlink   
./node_modules/.pnpm/lodash@4.0.0   -> hardlink  

關于軟鏈接/硬鏈接

假設我們有一個文件,稱為 hello

通過 ln -s 創(chuàng)建一個軟鏈接,通過 ln 可以創(chuàng)建一個硬鏈接。

$ ln -s hello hello-soft  
$ ln hello hello-hard  
  
$ ls -lh  
total 768  
45459612 -rw-r--r--  2 xiange  staff   153K 11 19 17:56 hello  
45459612 -rw-r--r--  2 xiange  staff   153K 11 19 17:56 hello-hard  
45463415 lrwxr-xr-x  1 xiange  staff     5B 11 19 19:40 hello-soft -> hello  

他們的區(qū)別有以下幾點:

軟鏈接可理解為指向源文件的指針,它是單獨的一個文件,僅僅只有幾個字節(jié),它擁有獨立的 inode

硬鏈接與源文件同時指向一個屋里地址,它與源文件共享存儲數(shù)據(jù),它倆擁有相同的 inode

總結

以上是生活随笔為你收集整理的pnpm初探的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。