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

徹底搞懂 npm、yarn 與 pnpm 依賴(lài)管理邏輯

開(kāi)發(fā) 前端
我們?cè)陧?xiàng)目開(kāi)發(fā)的過(guò)程中會(huì)引用到各種不同的庫(kù),各種庫(kù)又依賴(lài)了其他不同的庫(kù),這些依賴(lài)應(yīng)該如何進(jìn)行管理,今天這篇文章主要聊的就是這個(gè)事情。


npm2的依賴(lài)管理

npm2 安裝依賴(lài)的時(shí)候比較簡(jiǎn)單直接,直接按照包依賴(lài)的樹(shù)形結(jié)構(gòu)下載填充本地目錄結(jié)構(gòu)。

比如在項(xiàng)目中A和 C 都依賴(lài) B,無(wú)論被依賴(lài)的 B 是否是同一個(gè)版本,都會(huì)直接無(wú)腦的生成對(duì)應(yīng)的樹(shù)結(jié)構(gòu),比如我們現(xiàn)在有下面的依賴(lài):

  • A@2.0.0:BaseA@1.0.0 BaseB@2.0.0
  • B@3.0.0:BaseA@1.0.0 BaseB@2.0.1

那么npm i之后node_modules里面生成的內(nèi)容將是下面這樣的

這樣的結(jié)構(gòu)非常直觀,但是有一個(gè)問(wèn)題就是,如果項(xiàng)目的依賴(lài)過(guò)多的話,可能導(dǎo)致下面這些問(wèn)題:

  1. 生成的依賴(lài)嵌套非常深
  2. 相同版本的依賴(lài)大量冗余

npm3/yarn的依賴(lài)管理

npm3對(duì)于npm2的情況進(jìn)行了優(yōu)化,那么如何進(jìn)行優(yōu)化呢?其實(shí)我們最直觀的思路就是將樹(shù)打平,將依賴(lài)扁平化,不就能解決嵌套過(guò)深和依賴(lài)冗余的問(wèn)題。所以,在上面的例子中,如果我們用npm3來(lái)進(jìn)行install,最后生成的node_modules會(huì)是這樣的結(jié)構(gòu):

這樣看起來(lái)是不是就好多了,但是此時(shí)會(huì)有什么問(wèn)題呢?我們實(shí)操一下試試看。在項(xiàng)目中安裝A和B

可以看到我們項(xiàng)目本身的依賴(lài)文件里面只有a_klx和b_klx,但是執(zhí)行完npm i命令后卻發(fā)現(xiàn)多了幾個(gè)我們沒(méi)有引入的包a_base_klx和b_base_klx。

其實(shí)這是由a_klx和b_klx本身自己引入的npm包,但是卻出現(xiàn)在了我們的node_modules下。那么如果我們直接使用這兩個(gè)包會(huì)有什么反應(yīng)呢?

可以看到,我們是可以正常使用這兩個(gè)我們并未聲明在依賴(lài)中的npm包的,因?yàn)檫@兩個(gè)包存在于我們項(xiàng)目的node_modules下,根據(jù)npm包的查找規(guī)則,我們是可以找到這兩個(gè)包的。所以這種依賴(lài)關(guān)系就導(dǎo)致了下面兩個(gè)問(wèn)題:

  1. 我們項(xiàng)目本身的node_modules結(jié)構(gòu)不夠直觀
  2. 依賴(lài)不安全,我們可以使用依賴(lài)文件中并沒(méi)有聲明的npm包

其實(shí)第一點(diǎn)的問(wèn)題并不是很大,主要是第二點(diǎn)可能會(huì)導(dǎo)致一些奇怪的問(wèn)題。以我們之前的例子來(lái)說(shuō),我們可以直接在項(xiàng)目里面直接使用a_base_klx,因?yàn)閚ode_modules里面這兩個(gè)包實(shí)際上是存在的,但是他們又不是永遠(yuǎn)存在的。

萬(wàn)一有一天,a_klx和b_klx里都去除了這兩個(gè)基礎(chǔ)包的引用,node_modules里面將不再存在a_base_klx和b_base_klx,那么我們的代碼就會(huì)出現(xiàn)問(wèn)題...也就是:

我的代碼啥也沒(méi)動(dòng),放了一個(gè)晚上就壞了!

同時(shí),我們對(duì)于這種處理方式其實(shí)很容易有一個(gè)疑問(wèn),如果我同時(shí)引用了同一個(gè)包的多個(gè)不同版本,會(huì)幫我把哪個(gè)包提出來(lái),同時(shí)我每次npm i之后提出來(lái)的包版本都是一樣的嗎?會(huì)不會(huì)存在這次是2.0.0版本下次是2.0.1版本的情況,比如我們下面這種情況:

  •  A@1.0.0:BaseA@1.0.0 BaseB@2.0.0
  • B@1.0.0:BaseA@1.0.0 BaseB@2.0.1
  • D@1.0.0:BaseA@1.0.0 BaseB@2.0.1

生成的依賴(lài)是下面這樣的:

還是下面這樣的:

其實(shí)看起來(lái)后面這個(gè)更合理,因?yàn)橛袃蓚€(gè)包用到了2.0.1版本,將它提出來(lái)更好,我們實(shí)際操作一下試試:

被提到最外層的包是2.0.0版本的,然后b_klx和d_klx的node_modules下面各自有一個(gè) b_base_klx@2.0.1

這一塊的內(nèi)容自己查了一下,大部分說(shuō)法是會(huì)根據(jù)package.json里面的順序決定誰(shuí)會(huì)被提出來(lái),放在前面的包依賴(lài)的內(nèi)容會(huì)被先提出來(lái)。

不過(guò)自己實(shí)操了一下發(fā)現(xiàn)并不是這樣,即使我把b_klx或者d_klx移到最前面,被提出來(lái)的包依然是a_klx依賴(lài)的2.0.0版本,隨后自己翻了一下npm的源碼,發(fā)現(xiàn)內(nèi)部其實(shí)會(huì)對(duì)拿到的依賴(lài)列表進(jìn)行一些處理

最終會(huì)通過(guò)localeCompare方法對(duì)依賴(lài)進(jìn)行一次排序,所以字典序在前面的npm包的底層依賴(lài)會(huì)被優(yōu)先提出來(lái),對(duì)于我們的例子來(lái)說(shuō)就是a_klx所依賴(lài)的b_base_klx@2.0.0會(huì)被優(yōu)先提出來(lái)。

pnpm的依賴(lài)管理

pnpm為了解決上述這些問(wèn)題,采用了一種不同于npm/yarn的依賴(lài)管理方式。

如果我們用pnpm再來(lái)安裝一遍上面的依賴(lài),會(huì)發(fā)現(xiàn)項(xiàng)目的node_modules文件夾只有當(dāng)前package.json中所聲明的各個(gè)依賴(lài)(的軟連接),而真正的模塊文件,存在于node_modules/.pnpm,由模塊名@版本號(hào)形式的文件夾扁平化存儲(chǔ)(解決依賴(lài)重復(fù)安裝)。

同時(shí)這樣設(shè)計(jì),也很好的避免了之前可以訪問(wèn)非法npm包的問(wèn)題,因?yàn)楫?dāng)前項(xiàng)目的node_modules只有我們聲明過(guò)的依賴(lài),這也讓node_modules里面的文件看起來(lái)非常的直觀。

同時(shí),node_modules/.pnpm中存儲(chǔ)的文件其實(shí)是pnpm實(shí)際緩存文件的「硬鏈接」,從而避免了多個(gè)項(xiàng)目帶來(lái)多份相同文件引起的空間浪費(fèi)問(wèn)題。

但是說(shuō)到硬鏈接,又有一個(gè)問(wèn)題,這相當(dāng)于所有項(xiàng)目都依賴(lài)了同一個(gè)文件,那么在一個(gè)項(xiàng)目中修改了某個(gè)npm包的文件,就會(huì)影響到其他項(xiàng)目,這對(duì)于postinstall是很不友好的。

隨后繼續(xù)實(shí)操了一下,確實(shí)在不同項(xiàng)目中修改了某個(gè)npm包后會(huì)影響到其他項(xiàng)目。同時(shí)自己平時(shí)有時(shí)候也會(huì)直接在node_modules里面調(diào)試一些東西..感覺(jué)這種處理方式對(duì)于這種操作來(lái)說(shuō)也不是很友好。

但是從pnpm的官網(wǎng)來(lái)看,其實(shí)它默認(rèn)會(huì)使用copy-on-write 的方式來(lái)進(jìn)行處理,也就是如果你嘗試對(duì)內(nèi)容進(jìn)行修改的話,會(huì)復(fù)制一份文件而不會(huì)影響到源文件。

然后它不生效的原因似乎是因?yàn)閘ibuv的bug:https://github.com/pnpm/pnpm/issues/2761,所以在copy-on-write不生效的情況下被回退到了hardlink  的方式去處理。

責(zé)任編輯:龐桂玉 來(lái)源: 前端大全
相關(guān)推薦

2021-11-29 12:11:09

npm包管理器工具

2022-02-28 10:22:08

前端管理工具

2024-06-20 08:06:04

2022-09-16 22:23:35

pnpmCLI軟件

2022-02-21 09:58:31

包管理器npmyarn

2024-05-10 08:41:05

NPMYarn

2025-03-25 08:50:00

2025-09-15 00:00:01

2025-03-17 00:21:00

2025-07-07 06:21:46

2025-10-20 08:17:01

2023-04-12 00:00:40

Node.jsMonoreponpm

2022-08-03 00:04:29

pnpmyarnnpm

2023-10-07 08:35:07

依賴(lài)注入Spring

2021-06-30 08:45:02

內(nèi)存管理面試

2023-04-18 23:44:54

性能優(yōu)化開(kāi)發(fā)preload

2025-04-21 04:00:00

2021-02-25 07:24:35

pnpm包管理器前端

2024-12-04 13:54:19

pnpm存儲(chǔ)項(xiàng)目

2024-03-08 10:38:07

Vue響應(yīng)式數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

久久精品国产视频| 久久99久国产精品黄毛片色诱| 日韩一区二区三区免费观看| 无码粉嫩虎白一线天在线观看| 欧美视频久久久| 日韩二区在线观看| 欧美激情欧美激情| 特级西西www444人体聚色| 豆花视频一区| 色综合一个色综合| 成人av电影天堂| 精品无码人妻一区二区三| 狠狠综合久久av一区二区蜜桃| 欧美人与禽zozo性伦| 日韩五码在线观看| 亚洲成a人v欧美综合天堂麻豆| 国产精品一区二区在线观看不卡 | 一本色道久久| 欧美一区二区在线观看| 国产91在线视频观看| 亚洲精品国产一区二| 日韩福利电影在线| 97视频在线免费观看| 国产精品免费人成网站酒店| 91福利精品在线观看| 亚洲影视在线播放| 一区二区三区在线观看www| 日韩有码电影| 亚洲欧美日本视频在线观看| 欧美成年人视频网站欧美| brazzers精品成人一区| 国产精品国产三级在线观看| 色视频一区二区| 三上悠亚久久精品| 色呦呦在线播放| 国产精品久久久久国产精品日日| 国产精品福利久久久| 黄色片在线观看免费| 欧美高清视频看片在线观看| 日韩小视频在线观看专区| 日本激情综合网| 另类中文字幕国产精品| 欧美色道久久88综合亚洲精品| 日韩极品视频在线观看 | 美日韩黄色大片| 日韩欧美国产一区二区在线播放 | 久久99国产综合精品免费| 国产精品啊啊啊| 久久国产精品亚洲| 国产成人自拍网站| 婷婷丁香综合| 久久精品国产精品| 国产精品99久久久久久成人| 香蕉久久网站| 久久精品成人一区二区三区| 成人欧美一区二区三区黑人一| 亚洲区小说区图片区qvod| 日韩成人av一区| 一本色道综合久久欧美日韩精品| 乱馆动漫1~6集在线观看| 亚洲国产一区视频| 国产九色porny| 69av成人| 国产精品视频九色porn| 日韩免费一区二区三区| 色在线免费视频| 久久久99精品久久| 欧日韩一区二区三区| 国产女人在线视频| 中文字幕一区二区三中文字幕| 伊人av成人| 50度灰在线| 午夜精品久久久久久| 日本三级免费网站| 免费电影日韩网站| 欧美日韩一区二区三区在线看 | 成人av在线观| 欧美日韩国产精品一区二区| 国产一区二区小视频| 欧美96一区二区免费视频| 久久久久久久国产| 日韩成人一区二区三区| 久热精品视频| 91精品在线影院| 国产综合在线播放| 久久精品亚洲国产奇米99| 一区二区精品在线观看| 成人在线观看免费网站| 午夜国产不卡在线观看视频| 男人天堂成人在线| www.久久99| 亚洲精品狠狠操| 麻豆视频免费在线播放| 好看的av在线不卡观看| 啪一啪鲁一鲁2019在线视频| 亚洲熟女乱色一区二区三区久久久 | 男人透女人免费视频| 91成人短视频在线观看| 亚洲国产小视频在线观看| 久久国产柳州莫菁门| 欧美激情第10页| 国产成人精品久久亚洲高清不卡| 国产一区二区小视频| 91香蕉视频mp4| 特级黄色录像片| 成人免费av电影| 精品国产免费人成在线观看| 一区二区三区伦理片| 一区中文字幕| 在线观看日韩av| 国产一级二级毛片| 久久国产精品99久久人人澡| 美乳视频一区二区| 女人黄色免费在线观看| 欧美三级韩国三级日本三斤| 免费a在线观看播放| 一区二区三区在线| 国产高清在线不卡| 天堂在线资源8| 亚洲免费在线视频一区 二区| 人妻有码中文字幕| 97久久超碰| 亚洲大尺度美女在线| 精品少妇一区二区三区密爱| 免播放器亚洲| 国产精品久久一区二区三区| 黄色视屏免费在线观看| 欧美中文字幕一区| 999在线观看| 九九在线精品| 韩剧1988免费观看全集| 精品久久无码中文字幕| 中文字幕一区二区三区不卡 | 国产精品91一区二区| 中文字幕中文字幕99| 成人精品国产亚洲| 亚洲无线码在线一区观看| 91国产丝袜播放在线| 粉嫩一区二区三区性色av| 在线精品亚洲一区二区| 久久青草视频| 中文字幕一区日韩电影| 波多野结衣不卡视频| 欧美日本国产| 5566中文字幕一区二区| а√天堂官网中文在线| 欧美老肥妇做.爰bbww| jizzjizzjizz国产| 久久精品国产第一区二区三区| 亚洲国产精品一区二区第一页| 搜成人激情视频| 这里只有精品在线播放| 91在线视频国产| 亚洲欧洲韩国日本视频| 免费黄频在线观看| 女生裸体视频一区二区三区| 91嫩草免费看| 精品日韩av| 亚洲精品短视频| 久久久免费高清视频| 久久久不卡网国产精品一区| 国产xxxxx视频| 色777狠狠狠综合伊人| 成人免费视频a| 18加网站在线| 亚洲国产精品视频在线观看| 中文字幕第四页| 中文字幕高清不卡| 在线观看日本www| 影音先锋久久精品| 蜜桃网站成人| 日本免费成人| 欧美激情亚洲另类| 欧美成人综合在线| 欧美午夜不卡在线观看免费| 日本午夜在线观看| 成人午夜激情片| 亚洲欧美影院| gogo久久日韩裸体艺术| 日韩av大片免费看| 求av网址在线观看| 亚洲精品在线观看网站| 99久久久久久久久| bt欧美亚洲午夜电影天堂| 黄色免费视频大全| 日韩影院二区| 国产欧美综合精品一区二区| 日韩pacopacomama| 美日韩精品免费观看视频| 天天操天天操天天干| 欧洲精品中文字幕| 久草国产在线观看| 久久久久青草大香线综合精品| 欧美激情第3页| 日韩亚洲在线| 日本黄色播放器| 日韩美女国产精品| 成人xxxx视频| 黄色成人免费网| 欧美激情视频给我| av天在线观看| 日韩电影免费观看在线观看| 国产又粗又大又爽视频| 欧美日韩一区二区三区| 国产一区二区视频在线观看免费| 久久综合中文字幕| 成年女人18级毛片毛片免费| 成人黄色小视频| 成人h视频在线观看| 国产精品久久久久77777丨| 高清在线视频日韩欧美| 国产一二三区在线观看| 亚洲色图第三页| 日韩一级在线播放| 欧美一区二区三区播放老司机| 一级黄色免费网站| 亚洲制服丝袜在线| 日本午夜在线观看| 中文字幕av不卡| 性欧美13一14内谢| 99综合电影在线视频| 免费人成视频在线播放| 亚洲综合小说| 亚洲高清精品中出| 中文有码一区| 含羞草久久爱69一区| 天堂精品久久久久| 91丝袜美腿美女视频网站| 黑人一区二区三区| 国产脚交av在线一区二区| 午夜欧美激情| 午夜精品在线视频| 超黄网站在线观看| 久久久久国产精品免费网站| 99在线播放| 欧美老女人性生活| av中文字幕在线播放| 久久成年人视频| 欧美一区二区三区在线观看免费| 一区二区三区久久精品| 国产天堂在线| 国产亚洲精品激情久久| 久久经典视频| 国产亚洲精品一区二区| 国产视频第一区| 夜夜嗨av色综合久久久综合网| 国产中文字幕在线观看| 国产亚洲视频中文字幕视频| 国产女主播在线直播| 中文字幕欧美日韩va免费视频| 黑人与亚洲人色ⅹvideos | 午夜理伦三级做爰电影| 97国产一区二区| 色欲av无码一区二区三区| 久久久精品国产免费观看同学| 亚洲精品成人无码熟妇在线| 久久精品男人的天堂| 欧美 日韩 成人| 中文字幕一区三区| 日韩在线观看视频一区二区| 亚洲精品国产a| 久久精品免费在线| 欧美日韩在线视频观看| 国产99久久久久久免费看| 欧美私人免费视频| 国产精品一区二区av白丝下载 | 亚洲一区二区网站| 国产一区二区视频免费在线观看| 日本亚洲免费观看| 一区二区久久精品| 成人午夜激情片| 亚洲日本精品视频| 中文字幕欧美一区| 18精品爽视频在线观看| 黑人精品xxx一区| 伊人网综合在线| 日韩欧美高清一区| 亚洲欧洲精品视频| 最好看的2019的中文字幕视频| 乱子伦一区二区三区| 欧美日韩国产中文| 午夜精品久久久久久久99老熟妇| 日韩精品在线观看网站| 瑟瑟视频在线| 性欧美在线看片a免费观看| 成人香蕉视频| 亚洲xxxx做受欧美| 一区二区三区四区在线看| 91社在线播放| 性欧美xxxx大乳国产app| 亚洲这里只有精品| 不卡的看片网站| av黄色免费在线观看| 天天色综合天天| 国产精品热久久| 亚洲开心激情网| av网址在线看| 国产ts一区二区| 亚洲**毛片| 亚洲日本精品| 久久福利毛片| 亚洲精品鲁一鲁一区二区三区 | 久久久久久久久艹| 欧洲一区在线观看| 开心激情综合网| 久久精品国产欧美亚洲人人爽| 无遮挡在线观看| 国产精品日韩一区二区| 天天做天天爱天天综合网2021| 一本大道熟女人妻中文字幕在线 | 天天综合天天做| 欧美午夜一区二区三区| 无码精品人妻一区二区三区影院| 久久午夜a级毛片| 成人毛片免费| 欧洲精品久久| 亚洲综合不卡| 四虎精品一区二区| 亚洲人xxxx| 国产精品尤物视频| 精品小视频在线| 91在线三级| 99国产高清| 欧美高清一区| 成人av毛片在线观看| 日本一区二区久久| 天堂av免费在线观看| 亚洲精品日韩在线| 国产无遮挡裸体视频在线观看| 亚洲一区二区免费| 亚洲91精品| 色呦色呦色精品| 国产精品久久久久久妇女6080 | 免费成人av在线| 69精品无码成人久久久久久| 色诱视频网站一区| 日韩精品视频无播放器在线看 | 中文字幕综合网| 一本色道久久综合亚洲| 这里只有精品在线播放| 黄色成人在线视频| 亚洲激情电影在线| 青青青伊人色综合久久| 久操视频在线观看免费| 欧美在线free| fc2在线中文字幕| 国产免费一区二区三区在线观看| 国产三级一区| 亚洲免费不卡| 激情六月婷婷久久| 中文字幕av播放| 日韩精品中午字幕| 91黄页在线观看| 免费一区二区三区在在线视频| 在线视频精品| 日韩精品电影一区二区| 欧美在线一二三| 美女国产在线| 91手机在线观看| 日韩午夜免费视频| 波多野结衣一本| 欧美日本一区二区在线观看| 欧美r级在线| 国产九区一区在线| 亚洲欧美网站| 国产精品18在线| 欧美成人综合网站| 麻豆蜜桃在线观看| 日韩美女一区| 国产精品白丝av| 一级免费在线观看| 3d成人h动漫网站入口| 97caopron在线视频| 国产亚洲精品久久飘花| 天堂成人免费av电影一区| 国产又色又爽又高潮免费| 欧美不卡在线视频| 成人影院大全| 国产精品亚洲天堂| 99国产精品久久久久久久久久| 亚洲av无码不卡| 九九热这里只有精品免费看| 香蕉视频一区| 日本精品一区在线| 精品久久久久久国产| 2021av在线| 国产伦理久久久| 奇米在线7777在线精品| 久久久精品视频免费| 亚洲欧美日韩一区二区在线 | 精品第一国产综合精品aⅴ| 625成人欧美午夜电影| 日韩video| 久久久久国产精品麻豆ai换脸| 国产精品久久777777换脸| 777午夜精品福利在线观看| 日本久久精品| 波多野结衣影院| 午夜精品视频在线观看| av网站无病毒在线|