前端工程化是現(xiàn)代Web開發(fā)中不可或缺的一環(huán),它的出現(xiàn)極大地提升了前端開發(fā)的效率和質(zhì)量。
在過(guò)去,前端開發(fā)依賴于手動(dòng)管理文件和依賴,這導(dǎo)致了許多問(wèn)題,如版本沖突、依賴混亂和構(gòu)建繁瑣等。而今,隨著眾多前端工程化工具的出現(xiàn),前端開發(fā)的效率得到了大大的提高。
隨著前端工程化工具生態(tài)的日益繁榮,如何選擇這些工具成為作為初學(xué)者的我們面對(duì)的第一個(gè)難題,究竟是應(yīng)該使用 npm 還是 yarn, 或者說(shuō)什么場(chǎng)景更適合使用 yarn, 什么場(chǎng)景適合使用 pnpm, 讓本就一頭霧水的我們更加難以抉擇。
本文將介紹四種常見的前端包管理工具,并對(duì)比這四種工具的優(yōu)劣,希望能對(duì)你的前端之旅有點(diǎn)小小的啟發(fā)~
npm
npm (node package manager) 是 Node.js 的官方包管理工具,同時(shí)也是 JavaScript 生態(tài)系統(tǒng)中最常用的包管理工具之一。
作為 node 的孿生兄弟, 在 node 安裝之時(shí),npm 也會(huì)一并安裝。
與此同時(shí),得益于 npm 繁榮的生態(tài),npm 的功能也非常強(qiáng)大,例如我們熟知的 vue、react、axios 等等,都是以 npm 包的形式在前端工程化項(xiàng)目中引入使用的。
那 npm 這種包管理工具顯著的優(yōu)缺點(diǎn)有哪些呢:
優(yōu)點(diǎn)
1、默認(rèn)集成
前文說(shuō)到,在 node 安裝之時(shí),npm 也會(huì)一并安裝。因此相比于其他 npm 工具來(lái)說(shuō),npm 作為 Node.js 的默認(rèn)包管理工具,不需要額外安裝和配置,即可直接使用。
2、成熟穩(wěn)定
作為包管理工具的鼻祖,pnpm、tnpm、yarn 本質(zhì)是對(duì) npm 的二次封裝,它們?cè)诘讓尤匀皇褂?npm 的包管理機(jī)制。
并且隨著近年來(lái) npm 的多次升級(jí),之前廣受大家吐槽的安裝速度慢、安全性不高、性能一般的問(wèn)題也得到了很大的改善。
缺點(diǎn)
1、安裝速度慢
相對(duì)于一些競(jìng)對(duì)工具,如 pnpm 和 yarn ,npm 在下載和安裝依賴包時(shí)速度較慢,這也是大家早期吐槽最多的點(diǎn)。
但是隨著 npm 近年來(lái)的不斷優(yōu)化,在 npm 5.x 版本中,“package-lock.json” 的引入使得 npm 在安裝依賴時(shí)通過(guò)生成一個(gè)鎖定文件,記錄了精確的依賴版本和依賴樹結(jié)構(gòu),從而更有效地處理依賴解析和版本管理,減少了重復(fù)下載和解析依賴的次數(shù)。
2、幽靈依賴
在 npm3.x 版本之前,npm 使用的是嵌套依賴管理方式,即每個(gè)包都有其自己的依賴樹。這種方式可能導(dǎo)致依賴冗余和版本沖突的問(wèn)題,使得項(xiàng)目變得復(fù)雜且難以維護(hù)。
為了解決 npm 包依賴冗余和版本沖突的問(wèn)題,從 npm 3.x 版本開始,npm 采用了扁平化的包管理方式。扁平化的管理方式將所有依賴項(xiàng)直接安裝在項(xiàng)目的根目錄下,避免了嵌套的依賴樹。
這樣一來(lái),可以更好地處理版本沖突和依賴冗余的問(wèn)題,提高了包的安裝速度和可靠性,但隨之也帶來(lái)了幽靈依賴的問(wèn)題。
所謂幽靈依賴,指的是項(xiàng)目的依賴樹中存在一些沒(méi)有在package.json中明確聲明的依賴。這些依賴通常是由其他依賴項(xiàng)間接引入的,而不是直接在項(xiàng)目中聲明的,后續(xù)文章為大家詳細(xì)講解~
yarn
Yarn 是在2016年由 Facebook、Google、Exponent 和 Tilde 聯(lián)合推出的一個(gè)包管理工具。
它的出現(xiàn)主要是為了解決當(dāng)時(shí) npm 安裝速度慢和依賴冗余的問(wèn)題。
優(yōu)點(diǎn)
為了解決 npm 安裝速度慢的問(wèn)題,yarn 引入了并行下載和本地緩存機(jī)制,通過(guò)同時(shí)下載多個(gè)包和利用本地緩存,顯著提高了安裝速度。
其次,通過(guò)引入鎖定文件 yarn.lock,確保項(xiàng)目依賴版本一致性,避免版本沖突問(wèn)題。
此外,yarn還增加了安全性的功能,通過(guò)引入校驗(yàn)和機(jī)制來(lái)確保下載的包的完整性和安全性。
yarn的出現(xiàn)彌補(bǔ)了當(dāng)時(shí) npm 在一些性能和安全方面的缺點(diǎn),提供了更好的用戶體驗(yàn)和性能優(yōu)化,逐漸贏得了開發(fā)者的青睞,并成為JavaScript生態(tài)系統(tǒng)中流行的包管理工具之一,尤其在國(guó)外,使用 yarn 作為包管理工具的程序員和公司非常多。
缺點(diǎn)
1、幽靈依賴
和 npm 一樣的是,yarn 也存在幽靈依賴的問(wèn)題。這是因?yàn)?yarn 在依賴管理方式上采用的也是扁平化的方式。
這種扁平化的方式可以減少依賴冗余和版本沖突的問(wèn)題,提高了安裝速度和可靠性,但也帶來(lái)了幽靈依賴的問(wèn)題。
pnpm
pnpm 的第一個(gè)穩(wěn)定版本(1.0.0)發(fā)布于 2017 年 5 月。
相比于 pnpm 和 yarn 來(lái)說(shuō),pnpm 的存在可以說(shuō)是完全避免了幽靈依賴的問(wèn)題,因此近年來(lái)受到了很多前端工程師的追捧。
優(yōu)點(diǎn)
1、有效的磁盤使用
pnpm 使用了共享的存儲(chǔ)策略,來(lái)存儲(chǔ)所有項(xiàng)目的所有包版本以及每個(gè)項(xiàng)目所需的符號(hào)鏈接。
這意味著,如果多個(gè)項(xiàng)目依賴于同一個(gè)包的同一個(gè)版本,pnpm 只會(huì)在磁盤上存儲(chǔ)一次。
對(duì)于 npm 和 yarn ,它們將為每個(gè)項(xiàng)目的 node_modules 文件夾分別存儲(chǔ)每個(gè)依賴包的副本。
2、更嚴(yán)格的依賴關(guān)系解析
pnpm 不會(huì)讓包訪問(wèn)那些沒(méi)有被明確列為其依賴的包。 這使得依賴關(guān)系更清晰,也幫助避免了一些難以追蹤的問(wèn)題。
缺點(diǎn)
1、兼容性問(wèn)題
由于 pnpm 的依賴關(guān)系解析方式更嚴(yán)格,某些包可能會(huì)在 pnpm 下運(yùn)行不正常,盡管在 npm 或 yarn 下可以正常運(yùn)行。
2、手動(dòng)維護(hù)依賴
pnpm 為了避免幽靈依賴的存在,要求所有的依賴都需要在 pakeage.json 文件中顯式聲明,隨著依賴項(xiàng)的增多,package.json 文件的維護(hù)難度也會(huì)增加。
tnpm
tnpm 是一款由淘寶團(tuán)隊(duì)開發(fā)和維護(hù)的包管理工具,它是針對(duì) npm 的一種替代方案。tnpm 的出現(xiàn),旨在解決 npm 在中國(guó)開發(fā)者中的使用體驗(yàn)問(wèn)題,特別是在網(wǎng)絡(luò)訪問(wèn)速度和包安裝速度方面。
優(yōu)點(diǎn)
1、更快的下載速度
tnpm 默認(rèn)使用淘寶鏡像源,它是在國(guó)內(nèi)搭建的一個(gè) npm 鏡像源。由于連接國(guó)內(nèi)服務(wù)器的速度更快,使用淘寶鏡像可以加快包的下載速度。
2、并行安裝
tnpm 通過(guò)并行安裝依賴項(xiàng)來(lái)提高安裝速度。相比 npm 的串行安裝,tnpm 可以同時(shí)下載和安裝多個(gè)包,提高了安裝的效率。
缺點(diǎn)
1、幽靈依賴
與 npm 類似的是,tnpm 也存在幽靈依賴的問(wèn)題。
幽靈依賴最大的弊端在于它會(huì)使得項(xiàng)目中的依賴項(xiàng)變得不可控,一旦幽靈依賴被刪除或更新,可能會(huì)影響到項(xiàng)目中功能的正常使用,并且隨著依賴項(xiàng)的增多,幽靈依賴出現(xiàn)的概率也會(huì)更大。
總結(jié)
總的來(lái)說(shuō),npm、tnpm、pnpm、yarn 這四種包管理器各有優(yōu)缺點(diǎn),相比于 pnpm 來(lái)說(shuō),幽靈依賴確實(shí)是 npm、tnpm、yarn 最明顯的短板。
但近年來(lái),很多大佬們自己封裝的幽靈依賴檢測(cè)工具一定程度上也能避免幽靈依賴帶來(lái)的困擾。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-692153.html
就我個(gè)人而言,對(duì)npm、tnpm、pnpm、yarn沒(méi)有明顯的傾向,只要保證在同一個(gè)項(xiàng)目中從始至終使用一種包管理工具就可以啦~文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-692153.html
到了這里,關(guān)于橫向?qū)Ρ?npm、pnpm、tnpm、yarn 優(yōu)缺點(diǎn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!