日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

Pnpm:包管理的新星,如何顛覆 Npm 和 Yarn

來(lái)源: 責(zé)編: 時(shí)間:2024-06-20 15:23:14 138觀看
導(dǎo)讀在探索現(xiàn)代 JavaScript 生態(tài)系統(tǒng)時(shí),我們常常會(huì)遇到新興技術(shù)的快速迭代和改進(jìn)。其中,包管理工具的發(fā)展尤為重要,因?yàn)樗鼈冎苯佑绊戦_(kāi)發(fā)效率和項(xiàng)目性能。最近,pnpm 作為一種新的包管理工具引起了廣泛關(guān)注。它不僅挑戰(zhàn)了傳統(tǒng)

kpo28資訊網(wǎng)——每日最新資訊28at.com

在探索現(xiàn)代 JavaScript 生態(tài)系統(tǒng)時(shí),我們常常會(huì)遇到新興技術(shù)的快速迭代和改進(jìn)。其中,包管理工具的發(fā)展尤為重要,因?yàn)樗鼈冎苯佑绊戦_(kāi)發(fā)效率和項(xiàng)目性能。最近,pnpm 作為一種新的包管理工具引起了廣泛關(guān)注。它不僅挑戰(zhàn)了傳統(tǒng)工具如 npm 和 Yarn,還提供了一些獨(dú)特的優(yōu)勢(shì),使其在許多方面超越了前輩。kpo28資訊網(wǎng)——每日最新資訊28at.com

為了更好地理解 pnpm 的優(yōu)勢(shì),我們從包管理工具的歷史開(kāi)始探索,從 npm2 開(kāi)始的各個(gè)階段。我們將看到 pnpm 如何通過(guò)技術(shù)創(chuàng)新解決歷史遺留問(wèn)題,并極大地提高性能和效率。接下來(lái),深入了解 pnpm 的核心機(jī)制以及它如何改變開(kāi)發(fā)者處理依賴(lài)管理的方式。kpo28資訊網(wǎng)——每日最新資訊28at.com

npm2

使用 Node 版本管理工具將 Node 版本降級(jí)到 4,然后 npm 版本將是 2.x。kpo28資訊網(wǎng)——每日最新資訊28at.com

kpo28資訊網(wǎng)——每日最新資訊28at.com

在一個(gè)目錄中運(yùn)行 npm init -y 快速創(chuàng)建一個(gè) package.json 文件。kpo28資訊網(wǎng)——每日最新資訊28at.com

然后運(yùn)行 npm install express,express 包及其依賴(lài)項(xiàng)將被下載:kpo28資訊網(wǎng)——每日最新資訊28at.com

kpo28資訊網(wǎng)——每日最新資訊28at.com

展開(kāi) express,它也有 node_modules:kpo28資訊網(wǎng)——每日最新資訊28at.com

kpo28資訊網(wǎng)——每日最新資訊28at.com

繼續(xù)展開(kāi)幾層,每個(gè)依賴(lài)項(xiàng)都有自己的 node_modules:kpo28資訊網(wǎng)——每日最新資訊28at.com

kpo28資訊網(wǎng)——每日最新資訊28at.com

換句話說(shuō),npm2 的 node_modules 是嵌套的。kpo28資訊網(wǎng)——每日最新資訊28at.com

這正常嗎?這有什么問(wèn)題嗎?kpo28資訊網(wǎng)——每日最新資訊28at.com

實(shí)際上,這確實(shí)有問(wèn)題。多個(gè)包不可避免地具有共同的依賴(lài)項(xiàng)。當(dāng)像這樣嵌套時(shí),相同的依賴(lài)項(xiàng)將被多次重復(fù),占用了相對(duì)較大的磁盤(pán)空間。kpo28資訊網(wǎng)——每日最新資訊28at.com

這還不是最大的問(wèn)題;致命的問(wèn)題是 Windows 中文件路徑的最大長(zhǎng)度超過(guò) 260 個(gè)字符。像這樣嵌套會(huì)超過(guò) Windows 的路徑長(zhǎng)度限制。kpo28資訊網(wǎng)——每日最新資訊28at.com

在 npm 尚未解決這個(gè)問(wèn)題時(shí),社區(qū)出現(xiàn)了一個(gè)新的解決方案:yarnkpo28資訊網(wǎng)——每日最新資訊28at.com

yarn

Yarn 如何解決重復(fù)依賴(lài)和過(guò)長(zhǎng)嵌套路徑的問(wèn)題?kpo28資訊網(wǎng)——每日最新資訊28at.com

扁平化。所有依賴(lài)項(xiàng)不再逐層嵌套,而是全部處于同一層級(jí),因此不再存在重復(fù)依賴(lài)或路徑過(guò)長(zhǎng)的問(wèn)題。kpo28資訊網(wǎng)——每日最新資訊28at.com

我們刪除 node_modules,使用 Yarn 重新安裝并執(zhí)行 yarn add express:kpo28資訊網(wǎng)——每日最新資訊28at.com

此時(shí),node_modules 看起來(lái)像這樣:kpo28資訊網(wǎng)——每日最新資訊28at.com

kpo28資訊網(wǎng)——每日最新資訊28at.com

所有依賴(lài)項(xiàng)都在同一層級(jí),大多數(shù)包在其下沒(méi)有第二層 node_modules:kpo28資訊網(wǎng)——每日最新資訊28at.com

kpo28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)然,有些包仍然有 node_modules,例如這個(gè):kpo28資訊網(wǎng)——每日最新資訊28at.com

kpo28資訊網(wǎng)——每日最新資訊28at.com

為什么仍然存在嵌套?kpo28資訊網(wǎng)——每日最新資訊28at.com

因?yàn)橐粋€(gè)包可能有多個(gè)版本,并且只有一個(gè)版本可以被提升。因此,當(dāng)遇到不同版本的同一包時(shí),仍然使用嵌套。kpo28資訊網(wǎng)——每日最新資訊28at.com

npm 升級(jí)到版本 3 后,也采用了這種扁平化解決方案,與 yarn 非常相似:kpo28資訊網(wǎng)——每日最新資訊28at.com

kpo28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)然,yarn 也實(shí)現(xiàn)了 yarn.lock 的功能來(lái)鎖定依賴(lài)項(xiàng)版本,但 npm 也實(shí)現(xiàn)了這一點(diǎn)。kpo28資訊網(wǎng)——每日最新資訊28at.com

yarn 和 npm 都采用了扁平化解決方案。這種方法沒(méi)有問(wèn)題嗎?kpo28資訊網(wǎng)——每日最新資訊28at.com

不完全是,扁平化解決方案也有自己的問(wèn)題。kpo28資訊網(wǎng)——每日最新資訊28at.com

主要問(wèn)題是幽靈依賴(lài),這意味著在代碼中可以引入未在依賴(lài)項(xiàng)部分聲明的依賴(lài)項(xiàng)。kpo28資訊網(wǎng)——每日最新資訊28at.com

這很容易理解,因?yàn)橐磺卸际潜馄交模钥梢哉业揭蕾?lài)項(xiàng)的依賴(lài)項(xiàng)。kpo28資訊網(wǎng)——每日最新資訊28at.com

然而,這帶來(lái)了風(fēng)險(xiǎn),因?yàn)闆](méi)有明確的依賴(lài)聲明,如果有一天另一個(gè)包不再依賴(lài)于那個(gè)包,你的代碼將無(wú)法運(yùn)行,因?yàn)橐蕾?lài)于它,但現(xiàn)在沒(méi)有安裝。kpo28資訊網(wǎng)——每日最新資訊28at.com

這就是幽靈依賴(lài)的問(wèn)題。kpo28資訊網(wǎng)——每日最新資訊28at.com

另一個(gè)問(wèn)題是多個(gè)版本的依賴(lài)項(xiàng),如上所述。只有一個(gè)版本會(huì)被提升,而其他版本則會(huì)重復(fù)多次,導(dǎo)致磁盤(pán)空間浪費(fèi)。kpo28資訊網(wǎng)——每日最新資訊28at.com

社區(qū)有解決這兩個(gè)問(wèn)題的想法嗎?kpo28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)然有!這就是為什么引入了 pnpm。kpo28資訊網(wǎng)——每日最新資訊28at.com

pnpm

回顧一下,為什么 npm3 和 yarn 扁平化 node_modules?不就是因?yàn)橄嗤囊蕾?lài)項(xiàng)會(huì)被多次重復(fù),并且長(zhǎng)路徑可能會(huì)在 Windows 上引發(fā)問(wèn)題嗎?kpo28資訊網(wǎng)——每日最新資訊28at.com

如果我們不重復(fù)它們,而是使用鏈接呢?kpo28資訊網(wǎng)——每日最新資訊28at.com

首先,介紹鏈接。它是操作系統(tǒng)提供的軟鏈接和硬鏈接。硬鏈接是同一個(gè)文件的不同引用,而符號(hào)鏈接會(huì)創(chuàng)建一個(gè)新文件,其內(nèi)容指向另一個(gè)路徑。當(dāng)然,這兩種鏈接的使用方式是類(lèi)似的。kpo28資訊網(wǎng)——每日最新資訊28at.com

如果不復(fù)制文件,而是將 npm 包的唯一副本存儲(chǔ)在全局倉(cāng)庫(kù)中,并將其他位置鏈接到它呢?kpo28資訊網(wǎng)——每日最新資訊28at.com

這樣就不會(huì)因多次復(fù)制而浪費(fèi)磁盤(pán)空間,也不會(huì)有路徑過(guò)長(zhǎng)的問(wèn)題。路徑長(zhǎng)度的限制本質(zhì)上意味著不應(yīng)該有太深的目錄層級(jí);現(xiàn)在所有位置的目錄是鏈接在一起的,而不是在同一個(gè)目錄中,因此沒(méi)有長(zhǎng)度限制。kpo28資訊網(wǎng)——每日最新資訊28at.com

是的,pnpm 通過(guò)這種方法實(shí)現(xiàn)了這一點(diǎn)。kpo28資訊網(wǎng)——每日最新資訊28at.com

再次刪除 node_modules,然后使用 pnpm 通過(guò)運(yùn)行 pnpm install 重新安裝。kpo28資訊網(wǎng)——每日最新資訊28at.com

你會(huì)注意到它打印出這樣一句話:kpo28資訊網(wǎng)——每日最新資訊28at.com

kpo28資訊網(wǎng)——每日最新資訊28at.com

軟件包從全局存儲(chǔ)硬鏈接到虛擬存儲(chǔ),這里的虛擬存儲(chǔ)是 node_modules/.pnpm。kpo28資訊網(wǎng)——每日最新資訊28at.com

我們打開(kāi) node_modules 看一看。kpo28資訊網(wǎng)——每日最新資訊28at.com

kpo28資訊網(wǎng)——每日最新資訊28at.com

確實(shí)不是扁平的,依賴(lài) express,所以在 node_modules 下只有 express,沒(méi)有任何幽靈依賴(lài)。kpo28資訊網(wǎng)——每日最新資訊28at.com

展開(kāi) .pnpm 看看:kpo28資訊網(wǎng)——每日最新資訊28at.com

kpo28資訊網(wǎng)——每日最新資訊28at.com

所有依賴(lài)項(xiàng)都在這里解決,全部從全局倉(cāng)庫(kù)直接鏈接過(guò)來(lái),并通過(guò)符號(hào)鏈接組織包之間的依賴(lài)關(guān)系。kpo28資訊網(wǎng)——每日最新資訊28at.com

例如,.pnpm 下的 express,都是符號(hào)鏈接。kpo28資訊網(wǎng)——每日最新資訊28at.com

kpo28資訊網(wǎng)——每日最新資訊28at.com

換句話說(shuō),所有依賴(lài)項(xiàng)都是從全局倉(cāng)庫(kù)硬鏈接到 node_modules/.pnpm,然后它們通過(guò)符號(hào)鏈接相互依賴(lài)。kpo28資訊網(wǎng)——每日最新資訊28at.com

官方提供了一個(gè)示意圖,結(jié)合起來(lái)看很清楚:kpo28資訊網(wǎng)——每日最新資訊28at.com

kpo28資訊網(wǎng)——每日最新資訊28at.com

這就是 pnpm 的實(shí)現(xiàn)原理。kpo28資訊網(wǎng)——每日最新資訊28at.com

pnpm 的優(yōu)越性

首先,最大的優(yōu)勢(shì)是節(jié)省磁盤(pán)空間。包只在全局保存一份,其余的都是符號(hào)鏈接或硬鏈接。這節(jié)省了大量磁盤(pán)空間。kpo28資訊網(wǎng)——每日最新資訊28at.com

其次,它很快,因?yàn)樗褂面溄佣皇菑?fù)制,這自然使它更快。kpo28資訊網(wǎng)——每日最新資訊28at.com

這些也是它所宣稱(chēng)的優(yōu)勢(shì):kpo28資訊網(wǎng)——每日最新資訊28at.com

kpo28資訊網(wǎng)——每日最新資訊28at.com

相比 npm2,優(yōu)勢(shì)在于不會(huì)多次重復(fù)相同的依賴(lài)項(xiàng)。kpo28資訊網(wǎng)——每日最新資訊28at.com

相比 yarn 和 npm3+,沒(méi)有幽靈依賴(lài),也沒(méi)有未提升依賴(lài)項(xiàng)的重復(fù)問(wèn)題。kpo28資訊網(wǎng)——每日最新資訊28at.com

這已經(jīng)足夠優(yōu)秀,可以說(shuō)是對(duì) yarn 和 npm 的一次打擊。kpo28資訊網(wǎng)——每日最新資訊28at.com

結(jié)語(yǔ)

最近,pnpm 頻繁被提及,可以說(shuō)是當(dāng)下的趨勢(shì)。在本文中,我們總結(jié)了其受歡迎的原因:kpo28資訊網(wǎng)——每日最新資訊28at.com

npm2 以嵌套方式管理 node_modules,導(dǎo)致多次重復(fù)依賴(lài)項(xiàng)的問(wèn)題。kpo28資訊網(wǎng)——每日最新資訊28at.com

npm3+ 和 yarn 通過(guò)扁平化方式管理 node_modules,解決了嵌套方式的一些問(wèn)題,但引入了幽靈依賴(lài)的問(wèn)題。此外,同名包只有一個(gè)版本被提升,而其他版本仍會(huì)重復(fù)。kpo28資訊網(wǎng)——每日最新資訊28at.com

pnpm 通過(guò)不復(fù)制文件,而是從全局倉(cāng)庫(kù)硬鏈接到 node_modules/.pnpm,并通過(guò)符號(hào)鏈接組織依賴(lài)關(guān)系,解決了這些問(wèn)題。kpo28資訊網(wǎng)——每日最新資訊28at.com

這不僅節(jié)省了磁盤(pán)空間,消除了幽靈依賴(lài)問(wèn)題,還加快了安裝速度。從機(jī)械角度來(lái)看,pnpm 超越了 npm 和 yarn。kpo28資訊網(wǎng)——每日最新資訊28at.com

通過(guò)這種對(duì) npm 和 yarn 的創(chuàng)新方法,pnpm 正在通過(guò)簡(jiǎn)化依賴(lài)管理的方式產(chǎn)生影響。kpo28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-95167-0.htmlPnpm:包管理的新星,如何顛覆 Npm 和 Yarn

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Git是如何工作的?你知道嗎?

下一篇: 實(shí)現(xiàn)一個(gè)完美的高并發(fā)訂單減庫(kù)存方案

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
Top 主站蜘蛛池模板: 乌海市| 天柱县| 琼结县| 三河市| 安徽省| 太白县| 苍溪县| 伊宁市| 吉水县| 溧水县| 神池县| 集贤县| 阳西县| 苍溪县| 交城县| 宁乡县| 南阳市| 铜山县| 延吉市| 京山县| 固安县| 绥中县| 南平市| 承德市| 多伦县| 双流县| 孝感市| 枣庄市| 米脂县| 福贡县| 云和县| 广宗县| 衡南县| 湖口县| 都江堰市| 阿巴嘎旗| 五河县| 吉林省| 正宁县| 咸宁市| 尉犁县|