成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

JavaScript包管理器比較:Npm vs Yarn vs Pnpm

本篇文章帶大家了解一下三種JavaScript包管理器(npm、yarn、pnpm),并將這三種包管理器進(jìn)行對比,聊聊npm、yarn、pnpm三者的區(qū)別和關(guān)聯(lián),希望對大家有所幫助,如有問題歡迎指出!

JavaScript包管理器比較:Npm vs Yarn vs Pnpm

包管理器領(lǐng)域的三個主要參與者:

  • npm

  • Yarn

  • 高性能 npm (pnpm)

實際上我們已經(jīng)在所有包管理器中實現(xiàn)了基本相似的功能,因此您很可能會根據(jù)非功能性要求來決定使用哪個包管理器,例如安裝速度、存儲消耗或?qū)嶋H情況。

當(dāng)然,您選擇使用每個包管理器的方式會有所不同,但它們都有基本一致的概念。以上這些包管理器都可以執(zhí)行以下指令:

  • 讀寫數(shù)據(jù)
  • 批量安裝或更新所有依賴項
  • 添加、更新和刪除依賴項
  • 運行腳本
  • 發(fā)布包

然而盡管如此,包管理器在底層還是有所不同的。傳統(tǒng)上 npmYarn 將依賴項安裝在一個平鋪的node_modules文件夾中。(這里注意先后順序,是 yarn 先平鋪的,之前 npm 是遞歸)。但是平鋪也會造成一系列的安全問題。

  • 依賴結(jié)構(gòu)的不確定性

  • 扁平化算法本身的復(fù)雜性很高,耗時較長。

  • 項目中仍然可以非法訪問

  • 有聲明過依賴的包

因此,pnpmnode_modules 文件夾中引入了一些新概念來更高效的存儲依賴,。Yarn Berry 甚至通過完全放棄 node_modules 的 (PnP) 模式(另一個文章會具體說明)來走得更遠(yuǎn)。

JavaScript package簡史


最早發(fā)布的包管理器是 npm,早在 2010 年 1 月。它就確立了今天包管理器工作的核心原則。但是既然 npm 已經(jīng)存在 10 多年了,為什么還有其他選擇?以下是出現(xiàn)這種情況的一些關(guān)鍵原因:

  • node_modules 文件夾結(jié)構(gòu)的依賴關(guān)系解析算法不同(嵌套 & 平鋪、node_modules vs. PnP mode)
  • 依賴提升方式不同(hoisting
  • locking 格式不同(性能都不同,比如 yarn 自己寫的那一套)
  • 磁盤存儲包文件方式不同(空間效率不同)
  • 多包項目(又名 workspaces)的支持不同,這會影響 monorepos 的可維護(hù)性和速度
  • 新工具和命令的需求不同(通過插件和社區(qū)工具對可擴(kuò)展性的需求不同)
  • 可配置性和靈活性不同

讓我們深入了解一下 npm 崛起后這些方面如何確定的歷史,Yarn Classic 如何解決其中的一些問題,pnpm如何擴(kuò)展這些概念,以及 Yarn Berry 作為 Yarn Classic 的繼任者如何打破這些傳統(tǒng)的概念和流程。

先驅(qū)者 npm

npm 是包管理器的鼻祖。許多人錯誤地認(rèn)為 npm 是“Node package manager”的首字母縮寫詞,但事實并非如此。

它的發(fā)布構(gòu)成了一場革命,因為在此之前,項目依賴項都是手動下載和管理的。npm 引入了諸如文件及其元數(shù)據(jù)字段、將依賴項存儲在node_modules, 自定義腳本, 公共和私有包等等。

2020 年,GitHub 收購了 npm,所以原則上 npm 現(xiàn)在歸微軟管理。在撰寫本文時,最新的主要版本是 v8,于 2021 年 10 月發(fā)布。

創(chuàng)新者 Yarn Classic

在 2016 年 10 月,F(xiàn)acebook 宣布與 Google 和其他一些公司合作開發(fā)一個新的包管理器(engineering.fb.com/2016/10/11/…),以解決 npm 當(dāng)時存在的一致性、安全性和性能問題。他們將替代品命名為Yarn。

盡管 Yarn 還是基于 npm 的許多概念和流程來架構(gòu)設(shè)計的,但 Yarn 還是對包管理器領(lǐng)域產(chǎn)生了重大影響。與 npm 相比,Yarn 并行化操作以加快安裝過程,這一直是 npm 早期版本的主要痛點。

Yarn 為讀寫、安全性和性能設(shè)定了更高的標(biāo)準(zhǔn),還發(fā)明了許多概念(后來npm也為此做了很多改進(jìn)),包括:

  • monorepo 支持
  • 緩存安裝
  • 離線下載
  • 文件鎖(Locking

Yarn v1 于 2020 年進(jìn)入維護(hù)模式 。從那時起,v1.x 系列被認(rèn)為是舊版,并更名為 Yarn Classic。它的繼任者 Yarn v2 (Berry) 現(xiàn)在是更加活躍的開發(fā)分支。

更高效的pnpm

pnpm 的第 1 版由 Zoltan Kochan于 2017 年發(fā)布。它是 npm 的替代品,所以如果你有一個 npm 項目,你可以馬上使用 pnpm

創(chuàng)建 pnpm 的主要原因是 npmYarn 對于跨項目使用的依賴項存儲結(jié)構(gòu)非常冗余。盡管 Yarn Classicnpm 具有速度優(yōu)勢,但它使用相同的依賴解析方法,這對 pnpm 來說是不行的:npmYarn Classic 使用 hoisting 來平鋪他們的 node_modules.

pnpm 沒有優(yōu)化之前的結(jié)構(gòu),而是引入了另一種依賴解決策略:內(nèi)容尋址的一種存儲結(jié)構(gòu)。此方法生成的 node_modules 文件夾其實是依賴于全局存儲在主文件夾上的 ~/.pnpm-store/ 目錄。每個版本的依賴項都物理形式存儲在該目錄文件夾中一次,構(gòu)成單一的源地址來節(jié)省相當(dāng)多的磁盤空間。

node_modules 結(jié)構(gòu)是通過使用 symlinks 創(chuàng)建依賴關(guān)系的嵌套結(jié)構(gòu)(其中文件夾內(nèi)每個文件/包都是通過硬鏈接存儲)官方文檔中的下圖闡明了這一點。(待填坑:軟硬鏈接)

JavaScript包管理器比較:Npm vs Yarn vs Pnpm

2021 年報告中可見 pnpm 的影響力:因為他們在內(nèi)容可尋址存儲方面的創(chuàng)新,競爭對手都希望采用 pnpm 的概念,比如象征性鏈接的結(jié)構(gòu)和包的高效磁盤管理。

Yarn (v2, Berry),用 Plug'n'Play 重新發(fā)明的輪子

Yarn 2于 2020 年 1 月發(fā)布,被宣傳為原始 Yarn 的重大升級。Yarn 團(tuán)隊將其稱為 Yarn Berry 以更明顯地表明它本質(zhì)上是一個具有新的代碼庫和新的原則規(guī)范的新包管理器。

Yarn Berry 的主要創(chuàng)新是其即插即用 (PnP)方法,它是作為修復(fù)node_modules的策略。不是生成node_modules 的策略,而是生成一個帶有依賴查找表的文件 .pnp.cjs,因為它是單個文件而不是嵌套的文件夾結(jié)構(gòu),所以可以更有效地處理依賴。此外,每個包都以zip 文件的形式存儲在文件夾內(nèi)來替代 .yarn/cache/,占用的磁盤空間也比 node_modules 少。

所有這些變化如此之快以至于在發(fā)布后引起了很大的爭議。PnP 這種破壞性的重大更改要求維護(hù)者更新他們現(xiàn)有的包以便與其兼容。默認(rèn)情況下使用全新的 PnP 方法并且恢復(fù)到 node_modules 最初并不簡單,這導(dǎo)致許多知名開發(fā)人員沒有加入其中的考慮且公開批評 Yarn 2。

此后,Yarn Berry 團(tuán)隊在其后續(xù)版本中解決了許多問題。為了解決 PnP 的不兼容問題,團(tuán)隊提供了方法來輕松更改默認(rèn)操作模式。在node_modules插件的幫助下,切換回傳統(tǒng) node_modules 方法只需要一行配置。

此外,隨著時間的推移,JavaScript 生態(tài)系統(tǒng)為 PnP 提供了越來越多的支持,正如您在此兼容性表中所見,一些大型項目已經(jīng)開始采用 Yarn Berry

盡管 Yarn Berry 還很年輕,但它也已經(jīng)對包管理器領(lǐng)域產(chǎn)生了影響——pnpm 在 2020 年末采用了PnP 方法。

安裝工作流程


首先必須在每個開發(fā)人員的本地和 CI/CD 系統(tǒng)上安裝包管理器。

npm

npmNode.js 一起提供,因此不需要額外的步驟。除了為您的操作系統(tǒng)下載Node.js 安裝程序外,使用 CLI 工具管理軟件版本已成為一種常見做法。在 Node 的上下文中,Node Version Manager (nvm) 或 Volta 已成為非常方便的實用程序。

Yarn Classic 和 Yarn Berry

您可以通過不同的方式安裝 Yarn 1,例如,作為 npm 包來安裝:.$ npm i -g yarn

要從Yarn Classic 遷移到 Yarn Berry,推薦的方法是:

  • 安裝或更新 Yarn Classic 到最新的版本

  • 使用命令升級到最新的現(xiàn)代版本

    yarn set version berry

但是,在此推薦的安裝 Yarn Berry方法是通過 Corepack。

Corepack是由 Yarn Berry 的開發(fā)者創(chuàng)建的。該計劃最初被命名為包管理器管理器(pmm) ?,并在 LTS v16 中與 Node 合并。

在 Corepack 的幫助下,因為 Node 包含 Yarn ClassicYarn Berrypnpm 二進(jìn)制文件所以您不必“單獨”安裝的 npm 的替代包管理器。這些墊片允許用戶運行 Yarn 和 pnpm 命令而無需先顯式安裝它們,也不會弄亂 Node 發(fā)行版。

Corepack 預(yù)裝了 Node.js ≥ v16.9.0。但是,對于較舊的 Node 版本,您可以使用⬇️

npm install -g corepack

在使用之前先啟用 Corepack。該示例顯示了如何在 Yarn Berry v3.1.1 中激活它。

# you need to opt-in first $ corepack enable # shim installed but concrete version needs to activated $ corepack prepare yarn@3.1.1 --activate

pnpm

您可以將 pnpm 作為 npm包來安裝: $ npm i -g pnpm。您還可以使用 Corepack 安裝 pnpm :

$ corepack prepare pnpm@6.24.2 --activate

項目結(jié)構(gòu)


在本節(jié)中,您將一目了然地看到不同包管理器的主要特征。您可以輕松發(fā)現(xiàn)配置特定包管理器涉及哪些文件,以及哪些文件是由安裝步驟生成的。

所有包管理器都將所有重要的元信息存儲在項目清單package.json文件中。 此外,根級別的配置文件可以被用來設(shè)置不同的私有包或者不同的依賴項解析配置。

在安裝步驟中,依賴項 dependencies 被存儲在文件結(jié)構(gòu)中,例如 node_modules 并生成鎖定文件 locking。本節(jié)不考慮工作區(qū)設(shè)置,因此所有示例僅顯示存儲依賴項的單個位置。

npm

使用$ npm install 或較短的 $ npm i 會生成一個 package-lock.json 文件和一個 node_modules 文件夾。還有 .npmrc 這種可配置的文件可以放在根級別目錄里面。有關(guān) locking 文件的

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
88久久精品无码一区二区毛片 | 国产成人无码AV在线影院 | 精品无人区一线二线三线区别| 久久99热狠狠色精品一区| 久久嫩草精品久久久久精品| 妺妺窝人体色777777换脸| 欧美狂野乱码一二三四区| 日韩精品无码一区二区中文字幕 | 中国高清VIDEOSSEXO另| 欧美成人V片观看| 国内精品久久久久久久COENT| 精品久久久久久无码人妻蜜桃| 久久免费的精品国产V∧| 欧美一区二区三区激情| 深夜A级毛片催情精视频免费 | 日本妇人成熟免费中文字幕| 无码人妻AⅤ一区 二区 三区| 亚洲精品成人网站在线观看| 自拍偷自拍亚洲精品10P| 成人嘿咻漫画免费入口| 国产丝袜无码一区二区视频| 久久久久琪琪去精品色无码| 侵犯美人妻中出中文字幕| 天天影视网色香欲综合网| 亚洲丰满少妇自摸| 99久久综合狠狠综合久久止| 日韩系列精品无码免费不卡| 无码人妻精品一区二区三区下载| 亚洲精品成人无码中文毛片不卡| 中文字幕乱码一区二区免费| 二三四五六七无产乱码| 精品国产一区二区三区久久影院 | 无遮挡十八禁污污网站免费| 亚洲色偷无码一区二区| WW欧日韩视频高清在线| 国产精品国产三级国产AV′| 久久天天躁狠狠躁夜夜AV不卡| 日本入室强伦姧在线观看| 亚洲AV无码久久寂寞少妇多毛| 张柏芝阿娇全套无删减1313| 动漫人物桶动漫人物免费观看网站| 河南妇女毛深深的沟WCD| 欧美黑人XXXX| 亚洲 欧美 中文 日韩AⅤ| 中文字幕无码AV不卡一区| 无码A∨高潮抽搐流白浆8MAV | 噜噜噜亚洲色成人网站∨| 色综合天天天天综合狠狠爱| 亚洲欧美日韩愉拍自拍| 宝宝怎么这么湿~别磨| 精品国产免费人成网站| 人妻无码人妻有码中文字幕在线| 亚洲成AV人在线视达达兔| 按摩师的巨大滑进我的身体 | 女人不怕粗短就怕蘑菇头什么意| 无码人妻精品一区二区蜜桃天美 | 中文字幕人妻无码乱精品| 国产精品18HDXXXⅩ| 麻花传媒MV与其它传媒公司比较| 挺进邻居漂亮的娇妻| 中文字幕AV在线一二三区| 国产美女裸体丝袜喷水视频| 女朋友特别闷骚很吸引别人| 亚洲AV无码成H人在线观看| А√最新版资源在线官网| 精品人妻无码区二区三区密桃| 日本少妇被黑人猛CAO| 亚洲综合一区无码精品| 国产高潮流白浆喷水在线观看 | 18禁无遮挡啪啪摇乳动态图| 国产无人区码一码二码三MBA| 欧美熟妇SEXFREE| 亚洲国产精久久久久久久| 绯色精品人妻av一区二区| 免费人成视频网站在线18| 亚洲AV无码乱码国产麻豆| 粗大的内捧猛烈进出在线视频| 老师趴讲台屁股撅起来作文 | 97国产精华最好的产品| 护士长在办公室躁BD| 色欲av成人蜜臀av不卡| 97精品国产97久久久久久免费| 狠狠色噜噜狠狠狠8888在| 色欲AⅤ亚洲情无码AV蜜桃| 欧美极品少妇×XXXBBB| 女人被狂躁C到高潮视频| 亚洲欧美日韩中文二区| 国产精品成人无码视频| 人人澡人人妻人人爽少妇| 曰批视频免费看30分钟| 果冻传媒AⅤ毛片无码| 上边一面亲下边一面膜的功效 | 国产韩国精品一区二区三区久久| 欧美黑人又大又粗XXXXX吞精| 亚洲一区精品无码色成人| 国产一精品一AV一免费| 视频二区精品中文字幕| 啊灬啊灬啊灬快灬深视频无遮掩 | 国内精品久久久久影院中文字幕| 日老太太毛茸茸B.内射| HEYZO高清中文字幕在线| 毛豆日产精品卡2卡3卡4卡免费 | 亚洲AV永久无码国产精品久久| 国产成人高清精品免费软件| 日本一线和三线的区别是什么| 2021最新久久久视精品爱| 久久久久噜噜噜亚洲熟女综合| 亚洲国产欧美在线人成AAAA| 国产一在线精品一区在线观看| 无码AV熟妇素人内射vr在线| 荡公乱妇第1章方情95| 亚洲乱色熟女一区二区三区蜜臀| 国产女人18毛片水真多18精品| 他扒开内裤把舌头进去会有影响吗 | 无码专区人妻丝袜| 贵阳40多岁熟女高潮呻吟| 色偷偷亚洲第一成人综合网址 | 黑人与亚洲美女ⅩXXX| 亚洲 日本 欧美 中文幕| 国产精品YY9299在线观看| 熟妇人妻无码一区二区三区| 粉嫩av.一区二区三区免费| 色噜噜狠狠色综合久色AⅤ网视频| 啊轻点灬大JI巴太粗太长了在线 | 啊灬啊别停灬用力啊无码视频| 欧美大胆A级视频免费| AV大片在线无码永久免费网址| 免费观看A级毛片视频| 2021最新久久久视精品爱| 内射少妇骚B一√| AV无码精品久久久久精品免费| 欧美肥妇多毛BBW| FREEXXXXHD国语对白| 人妻精品久久久久中文字幕一冢本| 啊哈~给我~啊(H)| 三上悠亚SSNI-542在线| 公和我做好爽添厨房在线观看| 手机看片福利永久| 国产精品对白刺激久久久| 无码中文字幕AV免费放软件| 国产亚洲精品黑人粗大精选| 亚洲大尺度无码专区尤物| 九九久久亚洲AV东方伊甸园| 日本喷奶水中文字幕视频| 成人影院YY111111在线观| 少妇人妻好深太紧了A| 国产V亚洲V天堂A无码| 性欧美VIDEOFREE高清潮| 狠狠综合久久综合88亚洲 | 近親五十路六十被亲子中出| 亚洲色偷无码一区二区| 免费看又黄又无码的网站| IGAO在线视频成人免费| 日韩欧美视频一区二区| 国产激情无码一区二区三区| 亚洲AV无码乱码国产麻豆| 久久久久无码精品国产H动漫 | 老妇饥渴XXHDⅩXXOOO| 18禁黄无遮挡网站免费高清| 人人妻人人做从爽精品| 国产AⅤ无码专区亚洲AV| 亚洲AV成人精品网站在线播放| 精品一区二区三区免费乱码视频| 中国 韩国 日本 免费看片| 欧式春画图片大全欣赏简单| 国产96在线 | 亚洲| 亚洲AV综合色区无码另类小说| 久久久久亚洲AV成人无码网站| AV天堂永久资源网AV天堂| 色妺妺AⅤ爽爽影院偷拍| 国产毛片一区二区精品| 亚洲午夜福利AV一区二区无码| 女人被狂躁高潮啊的视频在线看 | 亚洲AV秘 无码一区二区三密桃| 久久精品国产精品亚洲色婷婷| 67194熟妇人妻欧美日韩| 色婷婷综合久久久久中文一区二区| 国产真实乱对白精彩久久| 在线精品亚洲一区二区绿巨人| 日本BBWW高潮BBWR| 国产无遮挡又黄又爽在线视频| 一边下奶一边吃面膜视频讲解图片 | 挺进邻居漂亮的娇妻| 久久精品成人欧美大片| А√天堂BT中文在线| 性色AV免费网站| 妺妺窝人体色WWW在线观看| 丰满岳跪趴高撅肥臀| 亚洲精品色无码AV试看| 欧美一区精品视频一区二区| 国产九九99久久99大香伊| 尤物爽到高潮潮喷视频大全| 搡老女人P老熟妇老熟女| 精品韩国亚洲AV无码不卡区| JAPANESE失禁潮喷| 亚洲 欧美 激情 小说 另类| 男人吵架后疯狂要你什么心理| 国产精品天天看天天狠| 中文字字幕乱码视频高清| 无码AV在线一本无码|