精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

高性能的包管理器Pnpm,你學會了嗎?

開發 前端
pnpm 通過巧妙硬鏈接 + 軟鏈接結合的方式完全實現了依賴樹結構的 node_modules,并且嚴格遵循了 Node.js 的模塊解析標準,解決了幻影依賴和 npm 分身的問題。并且通過全局只保存一份在 ~/.pnpm-store 的方式,在不同的項目中進行 install 的速度也會變得更快,也解決了磁盤空間占用的問題。

概念

performant npm。高性能的 npm。它的 slogan 是:

Fast, disk space efficient package manager。

快速的,節省磁盤空間的包管理工具。

特點

快速。pnpm 比替代方案快 2 倍數據來源[1]

  • 高效。Node_modules 中的文件是從一個單一的可內容尋址的存儲中鏈接過來的。可以理解成一個全局的 store 中獲取,后面會詳細提到。
  • 支持 monorepos。pnpm 內置支持了單倉多包。類似 --filter 后面接子 package 的 name 表示只把安裝的新包裝入這個 package 中等。簡單實踐參考[2]
  • 嚴格。pnpm 默認創建了一個非平鋪的 node_modules,因此代碼無法訪問任意包

npm 和 yarn 包管理機制

npm@3 之前

采用的是一種嵌套安裝的方式。如下圖所示:

node_modules
└─ foo
├─ index.js
├─ package.json
└─ node_modules
└─ bar
├─ index.js
└─ package.json

缺點:

  • package 中經常創建太深的依賴樹,這會導致 Windows 上的目錄路徑過長問題
  • 當一個 package 在不同的依賴項中需要時,它會被多次復制粘貼并生成多份文件

npm@3+ 以及 Yarn

將依賴偏平化:

node_modules
├─ foo
| ├─ index.js
| └─ package.json
└─ bar
├─ index.js
└─ package.json

缺點:

  • 幻影依賴(Phantom dependencies)。幻影依賴指的是 node_modules 中的依賴包在沒有 package.json 中聲明的情況下使用了其他包的依賴
  • 依賴結構的不確定性。這里為什么是 D@2.0.0 提升,而不是 D@10.0?都有可能,跟安裝的順序有關。詳情可參考[3]。避免這個問題的解決方案:lock 文件
  • npm 包分身。同樣的也因為打平了 node_modules 中的依賴,就會造成了相同版本的子依賴包在被不同的項目依賴所依賴時會安裝兩次(即上面的圖,B/C 兩個包都依賴了 D@2.0.0)

安裝很慢。相同的包安裝了兩次,占用磁盤空間,相對的安裝的速度也會變慢

非單例。當兩個不同的組件調用 require("library-f") 時,它們可能會得到兩個不同的庫實例,這意味著可能會突然出現兩個單例的實例(換言之,底層的 “global” 變量被分配到兩個不同的閉包中)。會使我們的調試變得非常困難

pnpm 的解決方案

前置知識

inode

每一個文件都有一個唯一的 inode,它包含文件的元信息,在訪問文件時,對應的元信息會被 copy 到內存去實現文件的訪問。

可以通過 stat 命令去查看某個文件的元信息。

stat README.md

hard link

硬鏈接可以理解為是一個相互的指針,創建的 hardlink 指向源文件的 inode,系統并不為它重新分配 inode。硬鏈接不管有多少個,都指向的是同一個 inode 節點,這意味著當你修改源文件或者鏈接文件的時候,都會做同步的修改。每新建一個 hardlink 會把節點連接數增加,只要節點的鏈接數非零,文件就一直存在,不管你刪除的是源文件還是 hradlink。只要有一個存在,文件就存在。

.pnpm 中的每個文件都是來自內容可尋址存儲的硬鏈接

soft link

軟鏈接可以理解為是一個單向指針,是一個獨立的文件且擁有獨立的 inode,永遠指向源文件,這就類比于 Windows 系統的快捷方式。刪除源文件,軟鏈接就會失效。

修改了軟鏈接或硬鏈接的文件,另外的硬鏈接或軟鏈接以及源文件都會發生變化,這里感覺是需要小心的,特別是修改文件以調試的時候,記得還原回去,否則另外一個項目用到的時候,可能會出問題

幾個重點結果表現

項目根目錄下的 node_modules 中

node_modules 中只有直接依賴的包,而沒有間接依賴的包。通過軟鏈接到.pnpm 目錄中

.pnpm

虛擬存儲目錄——.pnpm,所有直接和間接依賴項都鏈接到此目錄中。該目錄通過 @ 來實現相同模塊不同版本之間隔離和復用。

Store

pnpm在全局通過Store來存儲所有的 node_modules 依賴,并且在 .pnpm 中存儲項目的hard links

在使用 pnpm 對項目安裝依賴的時候,如果某個依賴在 sotre 目錄中存在了話,那么就會直接從 store 目錄里面去 hard-link,避免了二次安裝帶來的時間消耗,如果依賴在 store 目錄里面不存在的話,就會去下載一次。

假如全局的包變得非常大怎么辦?使用方法為 pnpm store prune ,它提供了一種用于刪除一些不被全局項目所引用到的 packages 的功能,例如有個包 axios@1.0.0 被一個項目所引用了,但是某次修改使得項目里這個包被更新到了 1.0.1 ,那么 store 里面的 1.0.0 的 axios 就就成了個不被引用的包,執行 pnpm store prune 就可以在 store 里面刪掉它了。

原理分析

我們來看一張原理圖:

我們項目中有一個依賴 bar@1.0.0。bar@1.0.0也有一個依賴 foo@1.0.0。

  • node_modules 下面有 bar@1.0.0 和 .pnpm 目錄,沒有 foo@1.0.0
  • bar@1.0.0 通過軟鏈接指向 .pnpm/bar@1.0.0/node_modules/bar@1.0.0。.pnpm/bar@1.0.0/node_modules/bar@1.0.0 又通過硬鏈接指向 Store
  • bar@1.0.0 依賴的foo@1.0.0 會安裝在跟自己的同一級,這里的設計,我理解是根據 node 的 require 機制,bar 中 require('foo') 的時候,就會先找到 foo@1.0.0,而不會往上尋找,這樣就避免依賴包版本不一致的問題。.pnpm/bar@1.0.0/node_modules/foo@1.0.0。并通過軟鏈接指向
  • pnpm 下一級的 foo@1.0.0

.pnpm/foo@1.0.0 一樣通過硬鏈接指向 Store

遷移和問題

我們現在可能用的是 npm 或者 yarn,那我們如何更好的過渡到 pnpm?或者會不會有什么問題?

  • 遷移:
  • 遷移 lock 文件。可以通過 pnpm import 的方式。參考[4]
  • 只允許使用 pnpm。參考[5]
  • 解決沖突。跟 npm 和 yarn 一樣。只需要解決完 package.json 的沖突,然后重新 install 即可
  • more...

問題:

  • CI/CD 中全局存儲的問題。可能會命中不同的機器,也有可能存在權限的問題
  • 相比 npm、yarn。社區還沒那么活躍
  • 硬鏈接在 window 系統有兼容性的問題
  • more…

總結

pnpm 通過巧妙硬鏈接 + 軟鏈接結合的方式完全實現了依賴樹結構的 node_modules,并且嚴格遵循了 Node.js 的模塊解析標準,解決了幻影依賴和 npm 分身的問題。并且通過全局只保存一份在 ~/.pnpm-store 的方式,在不同的項目中進行 install 的速度也會變得更快,也解決了磁盤空間占用的問題

參考資料

pnpm: 最先進的包管理工具[6]

中文官網[7]

npm 存在的問題以及 pnpm 是怎么處理的[8]

[1]數據來源: https://github.com/pnpm/benchmarks-of-javascript-package-managers

[2]簡單實踐參考: https://zhuanlan.zhihu.com/p/373935751

[3]參考: http://npm.github.io/how-npm-works-docs/npm3/non-determinism.htm

l[4]參考: https://pnpm.io/zh/cli/import

[5]參考: https://pnpm.io/zh/only-allow-pnpm[6]pnpm: 最先進的包管理工具: https://www.aisoutu.com/a/1218460

[7]中文官網: https://www.pnpm.cn/

[8]npm 存在的問題以及 pnpm 是怎么處理的: https://www.yuexunjiang.me/blog/problems-with-npm-and-how-pnpm-handles-them/

責任編輯:武曉燕 來源: 前端雜貨鋪
相關推薦

2025-04-02 08:21:10

2024-06-26 00:20:42

2024-10-31 09:15:09

2022-07-08 09:27:48

CSSIFC模型

2024-01-19 08:25:38

死鎖Java通信

2023-01-10 08:43:15

定義DDD架構

2024-02-04 00:00:00

Effect數據組件

2023-07-26 13:11:21

ChatGPT平臺工具

2022-02-28 10:22:08

前端管理工具

2024-02-02 11:03:11

React數據Ref

2024-01-02 12:05:26

Java并發編程

2023-08-01 12:51:18

WebGPT機器學習模型

2024-11-28 10:32:32

2022-09-12 08:01:21

GreatSQLMySQL性能

2024-09-27 19:39:27

2023-11-27 11:42:46

DjangoPython

2024-10-12 10:25:15

2022-02-21 09:58:31

包管理器npmyarn

2023-01-30 09:01:54

圖表指南圖形化

2024-08-06 09:47:57

點贊
收藏

51CTO技術棧公眾號

欧美一区二区成人6969| 欧美国产综合色视频| 国语自产精品视频在线看一大j8 | 日韩在线视频免费观看| 三级网站免费看| 偷拍自拍在线看| 国产精品国产三级国产aⅴ入口| 亚洲精品日韩av| 久久99精品波多结衣一区| 日韩中文在线电影| 亚洲第一天堂av| 亚洲精品久久久久久宅男| 9999精品成人免费毛片在线看| 久久久久久久综合| av一区和二区| 在线播放国产一区| 亚洲一区二区三区高清不卡| 欧美精品生活片| 亚洲а∨天堂久久精品2021| 精品福利一区| 91精品国产综合久久福利软件| 黄色片视频在线免费观看| 国产成人无吗| 国产精品视频一区二区三区不卡| 国产精品亚洲一区| 国产三级漂亮女教师| 日韩黄色免费电影| 97视频在线观看成人| 久久久成人精品视频| 亚洲精品在线视频观看| 人妻无码中文字幕免费视频蜜桃| 久久99国内精品| 日韩av理论片| 1级黄色大片儿| 综合久久一区| 久久精品成人动漫| 特级西西www444人体聚色 | 全国精品久久少妇| 国产91精品久久久久久久| 日韩一级片av| 午夜精品毛片| 北条麻妃久久精品| 五月婷婷婷婷婷| 国产欧美日韩精品高清二区综合区| 亚洲变态欧美另类捆绑| 国产精品果冻传媒| 日韩中文字幕无砖| 日韩一区二区三区精品视频| 婷婷激情综合五月天| 亚洲成人高清| 91.com视频| 色91精品久久久久久久久| aaaa欧美| 91超碰这里只有精品国产| 岛国av在线免费| 天天综合91| 欧美精品v国产精品v日韩精品| 最近中文字幕一区二区| www.久久| 欧美日韩在线综合| 在线观看岛国av| 成人激情久久| 欧美成人艳星乳罩| 久久久精品人妻一区二区三区| 日韩一二三区在线观看| 欧美日韩亚洲国产综合| 一级黄色录像在线观看| 精品一区二区三区在线观看视频| 日韩一区二区三| 黑人玩弄人妻一区二区三区| 三级小说欧洲区亚洲区| 亚洲九九九在线观看| 亚洲午夜精品久久久久久高潮| 日韩毛片视频| 欧美成人黑人xx视频免费观看| 欧美爱爱小视频| 99在线观看免费视频精品观看| 欧美亚洲国产视频| 午夜一级黄色片| 国产一区二区在线观看视频| 国产区一区二区三区| 你懂的在线看| 亚洲欧洲精品一区二区精品久久久| av磁力番号网| 免费在线小视频| 欧美综合在线视频| 男生和女生一起差差差视频| 日韩av网址大全| 色婷婷av一区二区三区在线观看 | 狠狠久久五月精品中文字幕| 无码日韩人妻精品久久蜜桃| 24小时成人在线视频| 欧美精品一区二区三区蜜臀| 在线免费观看视频| 中文字幕乱码亚洲无线精品一区 | 伊人成色综合网| 久久影视精品| 亚洲成人精品在线| 国产综合精品久久久久成人av| 欧美fxxxxxx另类| 国产成人在线亚洲欧美| 国产黄色一级大片| 久久精品亚洲国产奇米99| 影音先锋成人资源网站| 成人免费网站视频| 日韩午夜精品电影| 在线不卡av电影| 黄色亚洲精品| 国产精品专区h在线观看| 国产av无码专区亚洲a∨毛片| 久久综合中文字幕| 久久久国内精品| 国产一区二区三区四区五区3d| 亚洲成人久久久久| 亚洲av无码一区二区三区在线| 麻豆亚洲精品| 国内不卡一区二区三区| 精品少妇爆乳无码av无码专区| 美女做暖暖视频免费在线观看全部网址91 | 色就是色亚洲色图| 亚洲欧美日韩久久| 性欧美videossex精品| 日韩av网址大全| 欧美极度另类性三渗透| 中文字幕欧美色图| 久久亚洲精品国产精品紫薇| 妺妺窝人体色www看人体| 欧美高清免费| 亚洲性猛交xxxxwww| 天天操天天干视频| 成人免费视频视频| 欧美交换配乱吟粗大25p| 午夜不卡一区| 正在播放欧美一区| 青青视频在线免费观看| 97成人超碰视| 黄色www网站| 黄色欧美在线| 国内外成人免费激情在线视频网站| 国产精品人妻一区二区三区| 国产精品高清亚洲| www.亚洲高清| 日韩一区二区中文| 国产精品美女久久久久久免费| 免费人成在线观看网站| 狠狠爱在线视频一区| 99久久人妻精品免费二区| 亚洲免费成人| 久久久久久九九九九| 九九色在线视频| 欧美r级电影在线观看| 强乱中文字幕av一区乱码| 国产一区二区成人久久免费影院 | 亚洲最大av在线| 黄色av电影在线观看| 欧美老肥妇做.爰bbww| 人妻互换一区二区激情偷拍| 久久99久久久欧美国产| 一区二区在线中文字幕电影视频| 国产亚洲精彩久久| 欧美成人免费在线观看| 亚洲av无码一区二区三区dv| 亚洲图片欧美综合| 亚洲の无码国产の无码步美| 亚洲综合好骚| 水蜜桃亚洲一二三四在线| 成人性片免费| 久久成人一区二区| www.黄色网| 五月天婷婷丁香| 成人性视频免费网站| 国产自产在线视频| 一区二区三区四区在线看| 国产成人福利网站| av中文在线| 欧美一区二区三区在线| 日本一级淫片色费放| 久久亚洲精华国产精华液 | 国产成人在线网址| 国产精品资源站在线| 和岳每晚弄的高潮嗷嗷叫视频| 香蕉人人精品| 成人欧美一区二区三区黑人| 日韩三级电影视频| 亚洲人在线观看| 在线播放亚洲精品| 亚洲成av人片| 五月天免费网站| 成人在线视频首页| 噼里啪啦国语在线观看免费版高清版| 日韩欧美电影| 国产伦精品一区二区三区四区免费 | 中文在线日韩| 欧美日韩电影一区二区三区| 99久久这里有精品| 欧美在线视频一区二区| 黄色网页在线免费看| 亚洲精品一区二区网址| 国产又粗又猛又色又| 欧美午夜片欧美片在线观看| www.97视频| 国产亚洲精品精华液| 久久久久久久久久久影视| 日韩精品电影在线观看| 丁香色欲久久久久久综合网| 成人黄色av| 精品午夜一区二区三区| 国产精品一区二区三区av| 庆余年2免费日韩剧观看大牛| 国产激情在线视频| 在线观看精品国产视频| 少妇精品视频一区二区| 4438亚洲最大| 做爰无遮挡三级| 狠狠干狠狠久久| 亚洲www在线| 精品视频一区二区在线观看| 欧美激情在线观看视频免费| 一级特级黄色片| 国产成人av在线影院| av中文字幕网址| 免费不卡在线视频| 欧美日韩一区二区在线免费观看| 激情久久综合| 日本人妻伦在线中文字幕| 伊人久久大香线蕉精品组织观看| 四虎影院一区二区三区| 精品中文字幕一区二区三区av| 国产在线播放一区二区| 一本色道69色精品综合久久| 91影视免费在线观看| 久久亚洲精品人成综合网| 国产国语videosex另类| 亚洲天堂电影| 5566成人精品视频免费| 国产污视频在线播放| 久久久久久中文| 国产啊啊啊视频在线观看| 九九热精品视频国产| av文字幕在线观看| 久久国产精品免费视频| a级片国产精品自在拍在线播放| 最近日韩中文字幕中文| 素人av在线| 日韩网站免费观看| 麻豆影院在线观看| 最近2019中文字幕一页二页| 色影视在线观看| 综合久久五月天| 免费大片黄在线观看视频网站| 自拍偷拍亚洲一区| 超碰在线免费公开| 欧美成aaa人片在线观看蜜臀| av激情在线| 欧美激情亚洲国产| 1区2区3区在线| 琪琪亚洲精品午夜在线| 欧美性xxx| 国产精品亚洲综合天堂夜夜| 国产成人a视频高清在线观看| 国产欧美一区二区三区久久人妖 | 亚洲久久在线| 91传媒久久久| 日韩av网站在线观看| 污污网站在线观看视频| 国产伦精品一区二区三区免费迷| 美女日批在线观看| 国产99久一区二区三区a片 | 在线观看免费中文字幕| 欧美一级片在线看| 免费观看国产精品| 亚洲欧美国产精品| 含羞草www国产在线视频| 久久久精品久久| 91九色国产在线播放| 人人澡人人澡人人看欧美| 国产成人午夜性a一级毛片| 成人天堂噜噜噜| 欧美男男freegayvideosroom| 人偷久久久久久久偷女厕| 国产精品久久天天影视| 黄网站色视频免费观看 | 天天干天天玩天天操| 国产精品18久久久久久久网站| 亚洲精品乱码久久| 国产精品免费久久| 久久精品无码人妻| 欧美三级视频在线播放| 人妻无码中文字幕| 日日狠狠久久偷偷四色综合免费| 国产区美女在线| 国产精品com| 国产精品香蕉| 亚洲一区精品视频| 夜夜嗨一区二区| 国产永久免费网站| 久久婷婷色综合| 欧美黄色免费观看| 欧美色男人天堂| 天天综合天天色| 久久色精品视频| 成人爽a毛片免费啪啪| 91精品啪aⅴ在线观看国产| 人人精品亚洲| av动漫在线播放| 奇米四色…亚洲| 久久人人爽人人爽人人片| 亚洲少妇30p| 日韩黄色片网站| 亚洲电影免费观看高清完整版在线| 在线毛片网站| 国产成人亚洲综合91| 欧美大胆a级| 国产精品88久久久久久妇女| 蜜臀av一级做a爰片久久| 三级视频网站在线观看| 亚洲欧美视频一区| 这里只有精品国产| 亚洲性线免费观看视频成熟| bl在线肉h视频大尺度| 91传媒在线免费观看| 999久久久亚洲| 成人一区二区三| 久久影院午夜论| 日本在线小视频| 蜜桃成人av| 蜜桃视频日韩| 亚洲欧洲综合| 99re这里只有| 亚洲高清免费一级二级三级| 精品人妻一区二区三区浪潮在线 | 欧美色图天堂| 51蜜桃传媒精品一区二区| 91麻豆精品国产91久久久平台| 福利在线一区二区三区| 国产日产欧美一区二区视频| 69视频免费在线观看| 日韩成人在线电影网| 不卡av免费观看| 国产一区二区精品在线| 国语自产精品视频在线看8查询8| www.51色.com| 亚洲欧美日韩国产另类专区| 国产老妇伦国产熟女老妇视频| 精品国产一区av| 国产午夜精品一区在线观看| 中文字幕欧美日韩一区二区| 久久精品免费看| 成人欧美一区二区三区黑人一 | 三级视频在线| 青草成人免费视频| 狠狠操综合网| 日本特黄a级片| 亚洲欧洲日韩av| 精品国产伦一区二区三区| 欧美高清一级大片| 超碰精品在线观看| 午夜精品久久久久久久无码| 91农村精品一区二区在线| 亚洲成人av影片| 在线成人一区二区| 国产精品一区免费在线| 成年人网站国产| 99久免费精品视频在线观看| 天天干天天操天天爱| 一区二区欧美日韩视频| 91视频亚洲| 青青草成人免费在线视频| 久久久一区二区三区| 最近中文字幕在线观看| 久久九九亚洲综合| 凹凸成人在线| 热久久精品国产| 亚洲视频一二区| 欧美一区二区免费在线观看| 亚洲伦伦在线| 99久久久无码国产精品性波多| 欧美午夜激情小视频| 91caoporm在线视频| 福利视频久久| 丝袜美腿亚洲综合| 国产黄色的视频| 亚洲精品资源美女情侣酒店| 日韩成人综合网站| av日韩一区二区三区| 国产片一区二区| 亚洲精品综合网| 国产精品电影久久久久电影网| 午夜亚洲福利| 国产jjizz一区二区三区视频| 欧美一区二区福利视频| 成人勉费视频| 国产91在线亚洲| 国产欧美一区二区三区在线老狼| www.国产黄色| 国产精品va在线| 在线免费高清一区二区三区| 特黄一区二区三区| 国产视频自拍一区| 国产一区二区在线观|