npm
? 最初的npm只是簡(jiǎn)單的通過(guò)依賴去遞歸安裝包,所以說(shuō)每個(gè)依賴都會(huì)有自己的node_modules,node_modules是嵌套的。一個(gè)項(xiàng)目會(huì)存在多個(gè)包,多個(gè)包之間難免會(huì)有公共的依賴,node_modules嵌套的話,這樣公共依賴就會(huì)下載多次。會(huì)造成磁盤空間的浪費(fèi),較長(zhǎng)的下載時(shí)間,文件路徑過(guò)長(zhǎng)(windows文件路徑最長(zhǎng)是260多個(gè)字符,嵌套可能會(huì)超過(guò)其長(zhǎng)度限制)
對(duì)于上述的缺點(diǎn),在后面的版本效仿yarn的方式進(jìn)行了解決
優(yōu)點(diǎn):官方支持;社區(qū)龐大;
Yarn
Yarn通過(guò)扁平化node_modules(同一個(gè)包,不同版本還是會(huì)嵌套下載。一個(gè)包是有多個(gè)版本的,只能提升一個(gè)),解決了公共依賴重復(fù)下載和文件路徑過(guò)長(zhǎng)的問(wèn)題。還實(shí)現(xiàn)了yarn.lock來(lái)鎖定版本。版本提升會(huì)照成幽靈依賴(是 項(xiàng)目里使用了,但是未在項(xiàng)目的package.json 中定義的包)
優(yōu)點(diǎn):并行下載,安裝速度快;會(huì)緩存包,將包進(jìn)行全局安裝,所以支持離線模式,從全局安裝的包里面深拷貝到當(dāng)前項(xiàng)目;(區(qū)別于新的npm)
pnpm
當(dāng)使用 npm 或者yarn時(shí),如果你有 100 個(gè)項(xiàng)目,并且所有項(xiàng)目都有一個(gè)相同的依賴包,那么, 你在硬盤上就需要保存 100 份該相同依賴包的副本(yarn,拷貝了緩存的包)。如果是使用 pnpm,依賴包將被 存放在一個(gè)統(tǒng)一的位置(全局安裝),如果你對(duì)同一依賴包需要使用不同的版本,則僅有 版本之間不同的文件會(huì)被存儲(chǔ)起來(lái)。
? 扁平化的node_modules存在三個(gè)個(gè)問(wèn)題: 模塊可以訪問(wèn)它們不依賴的包;展開依賴關(guān)系樹算法是相當(dāng)復(fù)雜的;對(duì)于包的不同版本,只能提升一個(gè),還是會(huì)存在嵌套的node_modules;
pnpm對(duì)于包是全局安裝,每個(gè)項(xiàng)目的?node_modules?通過(guò)鏈接的形式將包鏈接到資源倉(cāng)庫(kù)中,這樣不僅節(jié)省了空間,同時(shí)也加快了安裝速度。
pnpm最大的優(yōu)點(diǎn)就是保留了非扁平化的node_modules?文件夾,通過(guò)鏈接指向包資源的存儲(chǔ)地。
ppm add axios,在node_modules下存在一個(gè).pnpm的包,是硬連接指向包的磁盤地址;node_modules第一層還有一個(gè)axios,他里面也有node_modules,是軟連接,指向.pnpm(硬連接就是同一個(gè)文件的不同引用,而軟鏈接是新建一個(gè)文件,文件內(nèi)容指向另一個(gè)路徑)ps:路徑過(guò)長(zhǎng)的限制本質(zhì)上是不能有太深的目錄層級(jí),現(xiàn)在都是各個(gè)位置的目錄的 link,并不是同一個(gè)目錄,所以也不會(huì)有長(zhǎng)度限制文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-697755.html
使用鏈接的指向,替代了yarn的復(fù)制,npm的下載,明顯速度快了很多也更加節(jié)省了磁盤空間;同時(shí)也存在一個(gè)問(wèn)題,如果你在一個(gè)項(xiàng)目?jī)?nèi)修改了一個(gè)包,那么其他依賴這個(gè)包的項(xiàng)目也會(huì)收到影響;文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-697755.html
到了這里,關(guān)于Pnpm,npm,yarn的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!