精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品18久久久| 欧美电影一区| 欧美综合久久久| 一区二区三区不卡在线| 午夜精品一区二区三| 99pao成人国产永久免费视频| 亚洲天堂久久av| 99999精品| 香蕉伊大人中文在线观看| 国产欧美一区二区三区鸳鸯浴 | av日韩中文| 欧美韩日一区二区三区四区| 97视频资源在线观看| 成人午夜淫片100集| 99精品综合| 亚洲乱码国产乱码精品精| 成人在线观看av| 日本熟妇毛耸耸xxxxxx| 青青草国产免费一区二区下载| 日韩欧美亚洲国产精品字幕久久久 | 国产一区二区三区91| 欧美丰满少妇xxxxx高潮对白 | 黄视频在线免费看| 中文字幕在线观看不卡| 久久久久久国产精品一区| 一区二区国产欧美| 久久久久久黄| 国内精品在线一区| 精品欧美一区二区久久久久| 精品久久网站| 日韩毛片中文字幕| 中文字幕18页| 国产欧美88| 欧美性猛交一区二区三区精品| 极品美女扒开粉嫩小泬| 日韩激情av| 亚洲三级视频在线观看| 性欧美大战久久久久久久免费观看| 天堂在线视频免费观看| 国产91精品欧美| 亚洲在线视频福利| 怡春院在线视频| 丝袜美腿亚洲一区| 欧美最猛性xxxxx免费| 国产在线视频二区| 国内精品久久久久国产盗摄免费观看完整版| 中文精品99久久国产香蕉| 亚洲最大成人网站| 熟妇高潮精品一区二区三区| 免费毛片b在线观看| 亚洲一级在线观看| 日本福利视频网站| 亚洲性图自拍| 亚洲激情在线激情| 黄色网络在线观看| www.欧美日本韩国| 亚洲乱码一区二区三区在线观看| 久久精品国产精品亚洲精品色| 91精品专区| 中文字幕一区二区三区av| 一区二区三区欧美成人| 欧美另类极品| 亚洲桃色在线一区| 中文精品无码中文字幕无码专区| 在线观看的网站你懂的| 亚洲资源中文字幕| 日韩小视频在线播放| 免费一二一二在线视频| 在线观看亚洲精品| 99re精彩视频| www.久久久久爱免| 精品日韩一区二区三区| 亚洲国产精品成人综合久久久| 亚洲精品一级二级三级| 亚洲香蕉av在线一区二区三区| 五月天精品在线| 亚洲h色精品| 九九视频直播综合网| 国产在线一区视频| 日韩精品一级二级| 国产欧美一区二区三区在线看| 中文字幕在线网站| 国产精品资源在线| 精品日本一区二区| 二区三区在线| 亚洲激情综合网| 国产精品后入内射日本在线观看| 久久uomeier| 欧美精三区欧美精三区| 扒开伸进免费视频| 精品成av人一区二区三区| 久久精品国产96久久久香蕉| 国产午夜激情视频| 日韩成人一级大片| 91传媒在线免费观看| 色婷婷在线视频| 国产欧美一区二区三区在线看蜜臀 | 97在线视频精品| 亚洲欧美一区二区三区在线观看| 久草中文综合在线| 国产一区二区三区高清| 亚洲乱亚洲乱妇| 亚洲第一精品在线| 亚洲国产日韩欧美在线观看| 国产成人澳门| 中文字幕亚洲综合久久| 黄色片视频网站| 九一九一国产精品| 欧美精品二区三区四区免费看视频 | 国产尤物视频在线观看| 国产.欧美.日韩| 亚洲精品一卡二卡三卡四卡| 不卡av免费观看| 欧美裸体一区二区三区| 巨胸大乳www视频免费观看| 在线观看日韩| 国产精品一区专区欧美日韩| 天天在线女人的天堂视频| 亚洲免费在线播放| 亚欧在线免费观看| 日韩人体视频| 国内精品久久影院| 国产精品爽爽久久久久久| 久久久久久麻豆| 国产婷婷一区二区三区| 深夜激情久久| 欧美精品在线第一页| 在线观看中文字幕码| 久久影音资源网| 3d动漫一区二区三区| 三级欧美日韩| 伦理中文字幕亚洲| 国产尤物视频在线观看| 国产精品美女久久久久aⅴ| 成年人网站大全| 香蕉一区二区| 2024亚洲男人天堂| 天堂在线观看av| 精品欧美国产一区二区三区| fc2成人免费视频| 欧美视频二区| 91嫩草在线视频| 免费网站免费进入在线| 欧美日韩国产综合一区二区三区 | 日本一区二区三区四区视频| 少妇一级淫片免费看| 亚洲制服丝袜av| 中国特级黄色大片| 亚洲高清毛片| 久草精品电影| 亚洲涩涩在线| 国产亚洲在线播放| 中文 欧美 日韩| 国产精品伦一区二区三级视频| 亚洲最大综合网| 国产精品福利在线观看播放| 国产日本欧美一区二区三区在线| 欧美一区二区三区在线观看免费| 欧美日韩国产一二三| 999精品在线视频| 国产九九视频一区二区三区| 超碰超碰超碰超碰超碰| 成午夜精品一区二区三区软件| 97视频在线观看免费| 四虎电影院在线观看| 色婷婷av久久久久久久| 亚洲一级片在线播放| 激情综合网激情| 亚洲国产精品女人| 大伊香蕉精品在线品播放| 91国自产精品中文字幕亚洲| 欧洲亚洲在线| 欧美区一区二区三区| 天天操天天操天天操天天操天天操| 国产精品亚洲一区二区三区妖精 | 在线精品亚洲欧美日韩国产| 一本大道久久加勒比香蕉| 亚洲天堂网视频| 一区二区三区日韩在线观看| 国产精品无码永久免费不卡| 美女视频免费一区| 隔壁人妻偷人bd中字| 国产精品一区二区三区av麻| 91日韩在线视频| 精精国产xxxx视频在线播放| 中文字幕日韩有码| 亚洲精品久久久久久动漫器材一区 | 欧美123区| 久久中文字幕视频| 亚洲 欧美 自拍偷拍| 欧美视频第二页| 久久久久久国产精品免费播放| 久久色中文字幕| 久久久精品视频国产| 噜噜噜91成人网| 青青草综合视频| 国产日产一区| aa日韩免费精品视频一| 久久久成人av毛片免费观看| 久久91亚洲精品中文字幕| 久草在线青青草| 精品日韩99亚洲| 中文字幕在线观看第二页| 精品久久久久久久久久| 老熟妇高潮一区二区三区| 91麻豆免费视频| 黑人巨大猛交丰满少妇| 日本免费在线视频不卡一不卡二| 18禁裸男晨勃露j毛免费观看| 成人网18免费网站| 精品一区二区久久久久久久网站| 91国产一区| 国产精品99久久久久久白浆小说| 久久青青色综合| 色偷偷9999www| 国产在线一在线二| 亚洲国产免费av| jizz中国女人| 欧美日韩一二三| 国产精品视频一区在线观看| 亚洲一区视频在线| 免费成人深夜夜行网站| 国产日本一区二区| 日韩片在线观看| 波多野结衣亚洲一区| 91香蕉视频免费看| 狠狠色丁香婷综合久久| 午夜免费一区二区| 久久综合九色综合欧美狠狠| 欧美二区在线视频| 亚洲日本激情| 无码 制服 丝袜 国产 另类| 欧美精品一区二区三区久久久竹菊| 亚洲一区二区三区涩| 波多野结衣在线播放一区| 色播亚洲婷婷| 欧美日中文字幕| 日本在线视频一区| 国内精品久久久久久久影视简单| 乱色588欧美| 久久99高清| 欧美午夜精品久久久久免费视| 天天躁日日躁狠狠躁欧美| 国产自产在线视频一区| 国产精品主播在线观看| 国产一区高清视频| 久久国产精品免费精品3p| 国产日韩精品推荐| 欧美一区 二区| 久久综合久久综合这里只有精品| 欧美大胆视频| 欧美日韩中文国产一区发布| 亚洲人成网站77777在线观看| 麻豆av一区二区| 国产成人ay| 亚州欧美一区三区三区在线| 国产精品成人av| 天堂а√在线中文在线| 激情欧美亚洲| 欧美在线观看成人| 青青青伊人色综合久久| 97人人爽人人| 国产福利一区在线观看| 欧洲熟妇的性久久久久久| 成人免费看视频| a级在线观看视频| 中日韩免费视频中文字幕| 黄色精品视频在线观看| 亚洲女人小视频在线观看| 国产极品在线播放| 色综合一个色综合亚洲| 中文字幕日韩国产| 日韩亚洲欧美综合| 天天干天天爽天天操| 国产亚洲视频在线观看| 国产cdts系列另类在线观看| 久久久久久久97| 456亚洲精品成人影院| 亚洲www在线| 久久黄色影视| 一本色道久久综合亚洲精品婷婷 | 欧美精品在线免费观看| 国内精彩免费自拍视频在线观看网址| 日韩美女在线播放| 91精品亚洲一区在线观看| 韩国成人一区| 先锋资源久久| 国产成人黄色片| 激情六月婷婷综合| 欧美成人三级伦在线观看| 国产精品另类一区| 99热国产在线观看| 欧美精选一区二区| 日韩欧美在线番号| 久久在线观看视频| 巨茎人妖videos另类| 亚洲精品日韩av| 国产一区二区三区电影在线观看| 800av在线免费观看| 免费一级欧美片在线观看| 国产性生活毛片| 日韩一区有码在线| 免费的毛片视频| 亚洲成人aaa| 国产黄色在线免费观看| 日韩免费av在线| 国产精品对白久久久久粗| 亚洲日本理论电影| 午夜影院日韩| 久久久久国产免费| 国产精品国产自产拍高清av| 国内自拍视频在线播放| 精品日韩在线观看| 国产丝袜在线| 国产精品爽黄69天堂a| 偷拍一区二区| av女优在线播放| 国产精品一二三在| 国精产品视频一二二区| 欧美午夜精品伦理| 天天射天天操天天干| 欧美激情一区二区三级高清视频| 欧美a一级片| 日韩视频精品| 久久一区中文字幕| avtt香蕉久久| 亚洲成人自拍网| 免费观看黄色一级视频| 欧美日韩第一页| 精品国产18久久久久久二百| 伊人久久99| 久久精品72免费观看| 国产jk精品白丝av在线观看| 色网站国产精品| 欧美偷拍视频| 26uuu亚洲伊人春色| 欧美a大片欧美片| 成人毛片一区二区| 99久久夜色精品国产网站| 国产无遮挡aaa片爽爽| 精品日韩在线观看| av资源中文在线天堂| 国产精品99久久久久久久| 国产主播一区| 国产精品久久久久久亚洲色| 亚洲第一成年网| 天堂在线视频网站| 欧美最猛性xxxxx亚洲精品| 久久av中文| 中文字幕第21页| 国产精品免费丝袜| 国产色在线视频| 欧美激情videoshd| 久久aimee| 国产第一页视频| 国产亚洲精久久久久久| 中文字幕+乱码+中文| 久久精品国产免费观看| 欧美日韩中出| 国产毛片视频网站| 久久一区二区三区国产精品| 久久亚洲精品石原莉奈| 在线视频一区二区| 成人噜噜噜噜| 成品人视频ww入口| 国产亚洲精品aa午夜观看| 这里只有久久精品视频| 日韩性生活视频| 97se亚洲| 欧美视频第三页| 国产精品欧美久久久久一区二区| 国产又粗又黄又爽的视频| 久久99国产综合精品女同| 国产精品一区二区三区美女| caoporn超碰97| 亚洲欧美国产三级| 天天干,夜夜操| 国产精品久久久久久久av电影| 亚洲香蕉av| 亚洲av成人片色在线观看高潮| 在线观看免费亚洲| 最近中文字幕免费mv2018在线| 精品国产一区二区三区麻豆小说| 日韩av在线发布| 91视频青青草| 日韩精品在线观看一区二区| 深夜日韩欧美| 可以在线看的av网站| 中文字幕乱码一区二区免费| 性网爆门事件集合av| 国产精品∨欧美精品v日韩精品| 国产精品成人一区二区不卡| 亚洲av成人无码一二三在线观看| 欧美系列日韩一区| 高清电影在线观看免费| 天天好比中文综合网| 国产成人精品亚洲日本在线桃色 | 91精品在线免费观看| 国产免费拔擦拔擦8x高清在线人| 亚洲国产欧美不卡在线观看|