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

pnpm才是前端工程化項目的未來

開發 前端
相信小伙伴們都接觸過npm/yarn,這兩種包管理工具想必是大家工作中用的最多的包管理工具,npm作為node官方的包管理工具,它是隨著node的誕生一起出現在大家的視野中,而yarn的出現則是為了解決npm帶來的諸多問題,雖然yarn提高了依賴包的安裝速度與使用體驗,但它依舊沒有解決npm的依賴重復安裝等致命問題。

前言?

相信小伙伴們都接觸過npm/yarn?,這兩種包管理工具想必是大家工作中用的最多的包管理工具,npm?作為node?官方的包管理工具,它是隨著node的誕生一起出現在大家的視野中,而yarn?的出現則是為了解決npm?帶來的諸多問題,雖然yarn?提高了依賴包的安裝速度與使用體驗,但它依舊沒有解決npm?的依賴重復安裝等致命問題?!竝npm」的出現完美解決了依賴包重復安裝的問題,并且實現了yarn帶來的所有優秀體驗,所以說「pnpm才是前端工程化項目的未來」。

npm 與 yarn 存在的問題?

早期的npm

在npm@3之前,node_modules?結構可以說是整潔?、可預測的,因為當時的依賴結構是這樣的:

node_modules 
└─ 依賴A
├─ index.js
├─ package.json
└─ node_modules
└─ 依賴B
├─ index.js
└─ package.json
└─ 依賴C
├─ index.js
├─ package.json
└─ node_modules
└─ 依賴B
├─ index.js
└─ package.json

每個依賴下面都維護著自己的node_modules,這樣看起來確實非常整潔,但同時也帶來一些較為嚴重的問題:

  • 依賴包重復安裝
  • 依賴層級過多
  • 模塊實例無法共享

依賴包重復安裝

從上面的依賴結構我們可以看出,依賴A與依賴C同時引用了依賴B,此時的依賴B會被下載兩次。此刻我們想想要是某一個依賴被引用了n次,那么它就需要被下載n次。(此時心里是不是在想,怎么會有如此坑的設計)

依賴層級過多

我們再來看另外一種依賴結構:

node_modules 
└─ 依賴A
├─ index.js
├─ package.json
└─ node_modules
└─ 依賴B
├─ index.js
├─ package.json
└─ node_modules
└─ 依賴C
├─ index.js
├─ package.json
└─ node_modules
└─ 依賴D
├─ index.js
└─ package.json

這種依賴層級少還能接受,要是依賴層級多了,這樣一層一層嵌套下去,就像一個依賴地獄,不利于維護。

npm@3與yarn

為了解決上述問題,npm3?與yarn?都選擇了扁平化結構,也就是說現在我們看到的node_modules里面的結構不再有依賴嵌套了,都是如下依賴結構:

node_modules 
└─ 依賴A
├─ index.js
├─ package.json
└─ node_modules
└─ 依賴C
├─ index.js
├─ package.json
└─ node_modules
└─ 依賴B
├─ index.js
├─ package.json
└─ node_modules

node_modules下所有的依賴都會平鋪到同一層級。由于require尋找包的機制,如果A和C都依賴了B,那么A和C在自己的node_modules中未找到依賴C的時候會向上尋找,并最終在與他們同級的node_modules中找到依賴包C。這樣就不會出現重復下載的情況。而且依賴層級嵌套也不會太深。因為沒有重復的下載,所有的A和C都會尋找并依賴于同一個B包。自然也就解決了實例無法共享數據的問題。

由于這個扁平化結構的特點,想必大家都遇到了這樣的體驗,自己明明就只安裝了一個依賴包,打開node_modules文件夾一看,里面卻有一大堆。

這種扁平化結構雖然是解決了之前的嵌套問題,但同時也帶來了另外一些問題:

  • 依賴結構的不確定性
  • 扁平化算法的復雜度增加
  • 項目中仍然可以非法訪問沒有聲明過的依賴包(幽靈依賴)

依賴結構的不確定性

這個怎么理解,為什么會產生這種問題呢?我們來仔細想想,加入有如下一種依賴結構:

A包與B包同時依賴了C包的不同版本,由于同一目錄下不能出現兩個同名文件,所以這種情況下同一層級只能存在一個版本的包,另外一個版本還是要被嵌套依賴。

那么問題又來了,既然是要一個扁平化一個嵌套,那么這時候是如何確定哪一個扁平化哪一個嵌套的呢?

圖片

這兩種結構都有可能,準確點說哪個版本的包被提升,取決于包的安裝順序!

這就是為什么會產生依賴結構的不確定?問題,也是 lock 文件?誕生的原因,無論是package-lock.json?(npm 5.x 才出現)還是yarn.lock?,都是為了保證 install 之后都產生確定的node_modules結構。

盡管如此,npm/yarn 本身還是存在扁平化算法復雜?和package 非法訪問的問題,影響性能和安全。

pnpm?

前面說了那么多的npm?與yarn的缺點,現在再來看看pnpm是如何解決這些尷尬問題的。

什么是pnpm

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

就這么簡單,說白了它跟npm?與yarn沒有區別,都是包管理工具。但它的獨特之處在于:

  • 包安裝速度極快
  • 磁盤空間利用非常高效

特性

安裝包速度快

圖片

從上圖可以看出,pnpm的包安裝速度明顯快于其它包管理工具。那么它為什么會比其它包管理工具快呢?

我們來可以來看一下各自的安裝流程

  • npm/yarn

圖片

  1. resolving:首先他們會解析依賴樹,決定要fetch哪些安裝包。
  2. fetching:安裝去fetch依賴的tar包。這個階段可以同時下載多個,來增加速度。
  3. wrting:然后解壓包,根據文件構建出真正的依賴樹,這個階段需要大量文件IO操作。
  • pnpm

圖片

上圖是pnpm的安裝流程,可以看到針對每個包的三個流程都是平行的,所以速度會快很多。當然pnpm會多一個階段,就是通過鏈接組織起真正的依賴樹目錄結構。

磁盤空間利用非常高效

pnpm 內部使用基于內容尋址的文件系統來存儲磁盤上所有的文件,這個文件系統出色的地方在于:

  • 不會重復安裝同一個包。用 npm/yarn 的時候,如果 100 個項目都依賴 lodash,那么 lodash 很可能就被安裝了 100 次,磁盤中就有 100 個地方寫入了這部分代碼。但在使用 pnpm 只會安裝一次,磁盤中只有一個地方寫入,后面再次使用都會直接使用hardlink。
  • 即使一個包的不同版本,pnpm 也會極大程度地復用之前版本的代碼。舉個例子,比如 lodash 有 100 個文件,更新版本之后多了一個文件,那么磁盤當中并不會重新寫入 101 個文件,而是保留原來的 100 個文件的hardlink,僅僅寫入那一個新增的文件。

支持monorepo

pnpm 與 npm/yarn 另外一個很大的不同就是支持了 monorepo,pnpm內置了對monorepo的支持,只需在工作空間的根目錄創建pnpm-workspace.yaml和.npmrc配置文件,同時還支持多種配置,相比較lerna和yarn workspace,pnpm解決monorepo的同時,也解決了傳統方案引入的問題。

monorepo 的宗旨就是用一個 git 倉庫來管理多個子項目,所有的子項目都存放在根目錄的packages目錄下,那么一個子項目就代表一個package。

依賴管理

pnpm使用的是npm version 2.x類似的嵌套結構,同時使用.pnpm 以平鋪的形式儲存著所有的包。然后使用Store + Links和文件資源進行關聯。簡單說pnpm把會包下載到一個公共目錄,如果某個依賴在 sotre 目錄中存在了話,那么就會直接從 store 目錄里面去 hard-link,避免了二次安裝帶來的時間消耗,如果依賴在 store 目錄里面不存在的話,就會去下載一次。通過Store + hard link的方式,使得項目中不存在NPM依賴地獄問題,從而完美解決了npm3+和yarn中的包重復問題。

圖片

我們分別用npm與pnpm來安裝vite對比看一下

npm

pnpm

圖片

圖片

所有依賴包平鋪在node_modules目錄,包括直接依賴包以及其他次級依賴包

node_modules?目錄下只有.pnpm和直接依賴包,沒有其他次級依賴包

沒有符號鏈接(軟鏈接)

直接依賴包的后面有符號鏈接(軟鏈接)的標識

pnpm安裝的vite 所有的依賴都軟鏈至了 node_modules/.pnpm/ 中的對應目錄。把 vite 的依賴放置在同一級別避免了循環的軟鏈。

軟鏈接和硬鏈接機制

pnpm 是通過 hardlink 在全局里面搞個 store 目錄來存儲 node_modules 依賴里面的 hard link 地址,然后在引用依賴的時候則是通過 symlink 去找到對應虛擬磁盤目錄下(.pnpm 目錄)的依賴地址。

這兩者結合在一起工作之后,假如有一個項目依賴了 A@1.0.0 和 B@1.0.0 ,那么最后的 node_modules 結構呈現出來的依賴結構可能會是這樣的:

node_modules
└── A
└── B
└── .pnpm
├── A@1.0.0
└── node_modules
└── A -> <store>/A
├── index.js
└── package.json
└── B@1.0.0
└── node_modules
└── B -> <store>/B
├── index.js
└── package.json

node_modules 中的 A 和 B 兩個目錄會軟連接到 .pnpm 這個目錄下的真實依賴中,而這些真實依賴則是通過 hard link 存儲到全局的 store 目錄中。

store

?pnpm?下載的依賴全部都存儲到?store?中去了,?store?是?pnpm?在硬盤上的公共存儲空間。

pnpm?的store?在Mac/linux中默認會設置到{home dir}>/.pnpm-store/v3;windows下會設置到當前盤符的根目錄下。使用名為 .pnpm-store的文件夾名稱。

項目中所有.pnpm/依賴名@版本號/node_modules/?下的軟連接都會連接到pnpm的store中去。

責任編輯:華軒 來源: 前端南玖
相關推薦

2023-09-15 10:33:45

前端工程化commit

2022-12-01 07:46:01

工程化工具

2022-07-14 11:43:47

Node.jswebpack

2021-05-18 19:18:50

前端工程化工程

2015-10-26 10:32:01

前端優化工程化

2022-07-26 17:19:11

前端前端工程化

2022-08-17 11:33:35

前端配置

2021-06-05 18:01:05

工具Rollup前端

2018-06-15 10:12:04

滴滴前端分支管理

2023-02-15 18:12:43

開發企業級CLI

2022-07-06 11:20:16

前端開發

2024-07-02 10:48:04

語言項目配置

2025-09-04 11:10:26

2020-10-10 07:14:08

前端項目斷點

2021-11-22 06:17:26

npm工程化工具

2023-04-07 15:12:46

ReactReact-Intl

2020-05-21 09:33:06

Reactive編程模型

2023-07-12 11:54:45

大前端WOT全球技術創新大

2022-08-20 18:28:49

汽車軟件

2021-03-19 07:23:23

Go架構Go工程化
點贊
收藏

51CTO技術棧公眾號

欧美日韩一区二区三区四区在线观看| 免费毛片b在线观看| 国产激情偷乱视频一区二区三区 | 伊人色在线视频| 91极品在线| 91亚洲精品久久久蜜桃网站| 亚洲欧美日本日韩| av日韩一区| 成人综合在线观看| 日本亚洲欧美成人| 五月天精品在线| 亚洲免费一区三区| 在线免费视频一区二区| av 日韩 人妻 黑人 综合 无码| 姝姝窝人体www聚色窝| 日韩激情视频网站| 欧美寡妇偷汉性猛交| 国产精成人品免费观看| 97久久亚洲| 欧美三级中文字幕在线观看| 国产96在线 | 亚洲| 日本在线免费网| 久久综合久久综合久久| 51精品国产人成在线观看 | 一本到不卡免费一区二区| 天天成人综合网| 国产区av在线| wwww国产精品欧美| 国产一区在线观| 99国产精品一区二区三区| 丝袜美腿亚洲一区二区图片| 久久久久久久久久久av| 亚洲精品一区二区三区在线播放| 校花撩起jk露出白色内裤国产精品| 69av一区二区三区| 污污的网站18| 午夜日韩成人影院| 狠狠久久五月精品中文字幕| 六月婷婷在线视频| 成年网站在线视频网站| 亚洲精品午夜久久久| 正在播放91九色| 在线毛片网站| 中文字幕精品在线不卡| 日本高清视频一区二区三区| 少妇性bbb搡bbb爽爽爽欧美| av在线播放成人| 国产伦精品一区| 成人免费公开视频| 国产91精品在线观看| 2019国产精品视频| 国产激情视频在线播放| 国产福利视频一区二区三区| 国产精品爽爽爽| 在线免费观看中文字幕| 青草国产精品久久久久久| 国产精品高清网站| 少妇无套内谢久久久久| 日本成人在线不卡视频| 国产精品一区二区三| 亚洲 小说区 图片区| 日本系列欧美系列| 国产伦精品免费视频| 亚洲资源在线播放| 精品一区二区三区在线观看国产| 成人激情视频免费在线| 精品毛片在线观看| 高清日韩电视剧大全免费| 国产视频在线观看一区| 同心难改在线观看| 国产午夜精品美女毛片视频| 亚洲精品成人自拍| 国产在线高清视频| 亚洲成人av一区| 免费在线激情视频| 狠狠久久综合| 欧美成人一区二区三区| 免费黄色三级网站| 国产a久久精品一区二区三区| 国产一区二区三区在线视频| 久久久久麻豆v国产| 女主播福利一区| 韩日欧美一区二区| 无码人妻丰满熟妇精品区| 麻豆91在线看| 国产精品久久久久久久小唯西川| 蜜桃视频在线播放| 亚洲日本成人在线观看| 91免费视频网站在线观看| 不卡一二三区| 欧美一区二区免费观在线| 成人性生活免费看| 欧美韩国日本在线观看| 欧美日韩国产123| 波多野结衣绝顶大高潮| 狠狠色丁香久久婷婷综合_中| 国产综合 伊人色| 69视频在线| 五月天婷婷综合| av亚洲天堂网| 色综合www| 欧美老女人性生活| 91视频在线视频| 成人黄色小视频在线观看| 亚洲图片在线观看| 超碰成人av| 91精品国产综合久久久久久久| 亚洲观看黄色网| 围产精品久久久久久久| 日韩男女性生活视频| 亚洲精品久久久久久动漫器材一区| 久久久亚洲精品一区二区三区| 国产成人免费高清视频| 国产精品.xx视频.xxtv| 精品调教chinesegay| 欧美精品videos极品| 奇米影视在线99精品| 久久精品国产精品国产精品污| h片在线观看网站| 在线观看免费一区| 亚洲天堂网一区二区| 欧美日韩1区2区3区| 成人欧美在线观看| 成人福利在线| 欧美特级www| 亚洲男女在线观看| 欧美日本亚洲韩国国产| 成人亚洲欧美一区二区三区| 98在线视频| 色久优优欧美色久优优| aaaaa一级片| 亚洲激情精品| 动漫美女被爆操久久久| a级影片在线观看| 欧美丰满少妇xxxbbb| 天堂av网手机版| 日韩福利视频网| 欧美日韩一区二区三区在线观看免| 蜜桃视频在线观看免费视频| 精品国产91亚洲一区二区三区婷婷| 日韩a级片在线观看 | www.超碰97.com| 色呦哟—国产精品| 国产精品视频xxxx| 999国产在线视频| 欧美日韩亚洲综合在线| 大吊一区二区三区| 蜜臀久久99精品久久久久宅男| 日本精品一区| 天堂久久午夜av| 中文字幕日韩av电影| 中文字幕欧美在线观看| 中文字幕一区二区不卡| 色婷婷综合在线观看| 欧美精品自拍| 国产免费高清一区| 在线看片福利| 国产一区二区三区在线观看视频| 在线视频精品免费| 国产精品免费看片| 中文字幕亚洲影院| 午夜精品影院| 国产亚洲二区| 不卡福利视频| 日韩网站在线观看| 亚洲av综合色区无码一二三区 | 91论坛在线播放| 国模杨依粉嫩蝴蝶150p| 日韩在线二区| 99久久国产免费免费| 理论不卡电影大全神| 亚洲视频在线观看| 国产一区二区在线视频聊天| 一区二区三区在线免费播放| 日本黄色录像片| 日韩电影一二三区| 日韩人妻一区二区三区蜜桃视频| 加勒比色综合久久久久久久久| 日本免费久久高清视频| 蜜桃视频在线观看www社区| 精品久久一区二区三区| 亚洲天堂男人av| 亚洲人成在线观看一区二区| 国产xxxxxxxxx| 日韩av一区二| 国产欧美日韩小视频| 欧州一区二区| av免费观看久久| 日本综合久久| 欧美日韩xxxxx| 国产精品一级伦理| 欧美一级欧美三级在线观看| 天天操天天操天天操天天| 国产精品久久久久桃色tv| 人妻av一区二区| 久久精品免费观看| 欧美日韩精品在线一区二区 | 男人天堂视频网| 一区二区三区在线高清| 免费成人深夜天涯网站| 国产·精品毛片| 三上悠亚在线一区二区| 最新亚洲激情| 97精品国产97久久久久久粉红 | 最新视频 - x88av| 日韩美女国产精品| 亚洲精品免费在线视频| 超薄肉色丝袜脚交一区二区| 欧美精品久久久久久久| 午夜视频成人| 国产一区二区美女视频| 亚洲三区在线观看无套内射| 欧美一区二区在线不卡| 中文字幕在线日亚洲9| 精品久久久久久中文字幕| 青青草成人免费| 国产精品久久久久精k8| 中文字幕第20页| 99久久精品国产观看| 美女被爆操网站| 九九久久精品视频| 欧洲熟妇精品视频| 男人天堂欧美日韩| 欧美成人高潮一二区在线看| 欧美日韩国产在线一区| 一本一本a久久| 第九色区aⅴ天堂久久香| 美日韩精品免费| 成人知道污网站| 99中文字幕| 亚洲国产欧美在线观看| 91在线无精精品一区二区| www.久久99| 国产在线观看91精品一区| 成人h在线观看| 国产精品久久久久91| 日日av拍夜夜添久久免费| 欧美亚洲国产精品| 一区二区电影免费观看| 欧美一级高清免费播放| 国产伦理精品| 97超级碰碰人国产在线观看| 黄视频网站在线观看| 国产综合在线视频| xxx在线免费观看| 国内自拍欧美激情| 黄色在线网站噜噜噜| 欧美在线视频一二三| 免费观看欧美大片| 日韩免费av片在线观看| 播放一区二区| 国产拍精品一二三| 国产精品国产三级在线观看| 91精品免费| 999久久久精品一区二区| 国产精品日韩欧美一区二区| 精品按摩偷拍| 另类欧美小说| 欧美亚洲国产激情| 美国av在线播放| 狠久久av成人天堂| 男人添女人下面高潮视频| 久久精品一区二区国产| 黄色在线视频网| 国产一区二区三区免费播放 | 91亚洲永久精品| 人人人妻人人澡人人爽欧美一区| 中文av字幕一区| 朝桐光av在线| 黄色一区二区三区| 最近国语视频在线观看免费播放| 欧美二区三区的天堂| 亚洲免费不卡视频| 亚洲欧美日韩在线一区| 免费网站看v片在线a| 久久久久久久久久久国产| 中文在线8资源库| 成人黄色免费在线观看| 9l视频自拍九色9l视频成人| 欧美一区二视频在线免费观看| 久久蜜桃av| 欧美视频在线观看视频| 日本免费新一区视频| 国产ts在线观看| 久久毛片高清国产| 欧美三级在线免费观看| 欧美日韩亚洲系列| 国产伦精品一区二区三区免.费| 精品国产免费视频| 成人网视频在线观看| 欧美高清自拍一区| 成人国产精品| 精品1区2区| 婷婷亚洲五月| 哪个网站能看毛片| 国产老妇另类xxxxx| 国产熟妇久久777777| 亚洲精品国产无天堂网2021| 无码aⅴ精品一区二区三区| 精品日产卡一卡二卡麻豆| 高清日韩av电影| 97香蕉久久超级碰碰高清版| 啪啪av大全导航福利综合导航| 久热这里只精品99re8久| 欧美搞黄网站| 国内自拍第二页| 国产婷婷色一区二区三区在线| 久久久久黄色片| 欧美日韩视频在线观看一区二区三区 | 黄在线免费看| 国产精品麻豆va在线播放| 日韩影视在线观看| 国产黄色激情视频| 精品制服美女丁香| 三年中国中文观看免费播放| 婷婷成人综合网| www.五月天激情| 精品国产区一区二区三区在线观看| 欧美gay视频| 久久久精品国产一区二区三区| 欧美日韩国产免费观看 | 中文字幕国产在线观看| 亚洲精品一区在线观看| 午夜dj在线观看高清视频完整版| 国产精品视频在线观看| 国产调教一区二区三区| 俄罗斯av网站| jiyouzz国产精品久久| 久久精品一级片| 日韩一区和二区| av在线网址观看| 成人午夜两性视频| 日韩情爱电影在线观看| 另类小说色综合| 国产精品久久久久久久第一福利 | 久视频在线观看| 欧美一二区视频| 在线观看操人| 99久久精品无码一区二区毛片 | 久久久久久久久久久成人| 欧美日韩黄色| 久久久久久久香蕉| 国产成人在线观看| 久草福利资源在线观看| 日韩欧美亚洲一区二区| 少女频道在线观看免费播放电视剧| 91亚洲精品一区| 欧美另类女人| 91精品又粗又猛又爽| 亚洲sss视频在线视频| 视频一区二区免费| 日韩av电影手机在线观看| 国产精品一区高清| 男人添女人下面免费视频| 国产精品理论片在线观看| 在线视频你懂得| 欧美xxxx做受欧美| 大型av综合网站| 国产成人精品视频免费看| 久久影音资源网| 中文字幕一区二区三区四区视频| 久久久成人的性感天堂| 亚洲综合色婷婷在线观看| 国产一区二区在线视频播放| 久久久久久久电影| 一级成人免费视频| 九九久久国产精品| 天天躁日日躁成人字幕aⅴ| 色诱视频在线观看| 中文字幕日韩一区二区| 欧美一区,二区| 国产97色在线|日韩| 99久久.com| 亚洲视频在线播放免费| 欧亚洲嫩模精品一区三区| 日韩免费视频一区二区视频在线观看| 国产成人一区二区三区影院| 91精品国产综合久久精品app| 无码人妻精品一区二区三区在线| 国产成人无吗| 国产精品你懂的| 欧美在线观看视频网站| 91在线国产观看| 亚洲字幕av一区二区三区四区| 美日韩在线视频| 在线成人动漫av| 99999精品| 欧美午夜精品在线| 久久综合之合合综合久久| 国产一级二级三级精品| 免费高清在线视频一区·| 免费一级a毛片夜夜看| 亚洲女人天堂av| 日韩精品成人在线观看| 99精品视频播放| 亚洲精品福利视频网站| 成人在线免费电影| 好吊妞www.84com只有这里才有精品 | 99久久久无码国产精品性色戒| 成人美女在线观看|