最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pnpm管理依賴包如何節(jié)省磁盤空間詳解

 更新時間:2023年11月21日 09:19:51   作者:一顆冰淇淋  
這篇文章主要為大家介紹了pnpm管理依賴包如何節(jié)省磁盤空間詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

npm 存在的問題

我們經(jīng)常使用 npm 來管理 node 項(xiàng)目中的包,從 package.json 中讀取配置將依賴下載到本地,以保障項(xiàng)目的正常運(yùn)行。

當(dāng)項(xiàng)目數(shù)量多時,這樣的包管理方式會非常的占用電腦內(nèi)存。由于每個項(xiàng)目都有屬于自己的依賴,每個項(xiàng)目都需要安裝,即使 npm 會對依賴進(jìn)行緩存,但是每個項(xiàng)目仍然需要安裝到自己的 node_modules 文件夾下,此時每個項(xiàng)目安裝的每一份依賴都會在磁盤中保存一份,即使各個項(xiàng)目中依賴的版本可能相同。

pnpm 就是針對以上問題出現(xiàn)的解決方案,它使用統(tǒng)一的倉庫來存放項(xiàng)目中的包,在項(xiàng)目中使用硬鏈接+軟連接的方式找到依賴所在磁盤的位置。

硬鏈接和軟連接

想要清晰的知道 pnpm 管理依賴的原理,首先要了解硬鏈接和軟連接、拷貝操作的區(qū)別。

拷貝

操作會在磁盤中復(fù)制一份新的數(shù)據(jù),比如拷貝 a.js 為 a_copy.js,兩個文件在拷貝后就互不關(guān)聯(lián),修改 a.js 不會影響 a_copy.js,刪除 a_copy.js 也不會影響 a.js。

硬鏈接

通過尋址的方式找到磁盤中的數(shù)據(jù),比如新建 b_hard.js 與 b.js 創(chuàng)建硬鏈接,兩者指向的是同一個磁盤數(shù)據(jù),所以修改其中一個文件,另一個文件也會發(fā)生變化。

軟連接

就是我們平時常見的創(chuàng)建快捷方式(文件后面會存在一個向右的小箭頭),它只是保存著文件的路徑,不可以編輯,直接雙擊就會找到原始的文件。如果原文件被刪除,通過軟連接將無法找到磁盤中的數(shù)據(jù)。

我們可以通過命令來進(jìn)行連接操作,windows 是這樣的

/*拷貝*/ copy a.js a_copy.js
/*硬鏈接*/ mklink /H b_hard.js b.js
/*軟連接*/ mklink c_soft.js c.js

pnpm原理

使用 npm 或者 yarn 時,如果有100個項(xiàng)目,并且所有項(xiàng)目都有一個相同的依賴包,那么在磁盤上就需要保存100份該相同依賴的包。

如果使用 pnpm,依賴包將被放在統(tǒng)一的位置,當(dāng)安裝包時,其包含的所有文件會硬鏈接到這個位置,不會另外占用磁盤空間,這樣不同項(xiàng)目之間就可以共享相同版本的依賴。

如果對同一依賴包使用相同的版本,那么磁盤上只有這個依賴包的一份文件,如果對同一依賴包使用不同的版本,那么只有版本之間不同的文件被存儲起來。

比如 a/b/c 三個項(xiàng)目都使用 axios,axios 的所有文件都保存在 pnpm 上,axios 這些文件對應(yīng)著磁盤的數(shù)據(jù),直接 a/b/c 項(xiàng)目的axios 通過硬鏈接指向磁盤里的數(shù)據(jù)。 這樣有兩個好處:

(1)效率非常高,無需下載、查找緩存解壓等操作

(2)節(jié)省磁盤空間,每個項(xiàng)目不需要再下載一份

pnpm 依賴包統(tǒng)一保存的位置可以使用命令 pnpm store path 來查看

非扁平的 node_modules 目錄

使用 npm 或者 yarn安裝的依賴包會將所有的子級依賴全部平鋪到 node_modules 文件夾中,即扁平化的目錄結(jié)構(gòu),這樣會導(dǎo)致源碼可以訪問本來不屬于當(dāng)前項(xiàng)目所設(shè)定的依賴包。

比如安裝 axios ,同時會安裝非常多的其它的庫如 form-data,雖然在 package.json 中是沒有配置的,但在源代碼中可以直接通過require('form-data') 引用,這樣就會有隱患,如果項(xiàng)目某天刪除了 axios,form-data 就不存在了。

使用 npm 和 pnpm 分別只安裝 axios,npm 會將 axios 所需的其它依賴平鋪,而 pnpm 的 node_modules 根目錄下只有 axios 和 .pnpm 文件夾,這樣就可以避免非主動下載的其它依賴包可隨意訪問的情況。

如果直接按照這樣的層級下載包,可能會帶來新的問題,如多個包依賴同一個包時,就會被重復(fù)安裝。

? node_modules
    ? axios
        ? node_modules
            ? form-data
    ? xxx
        ? node_modules
            ? form-data

那 pnpm 是如何做到非扁平化并且不重復(fù)安裝的呢?答案就是它使用硬鏈接與軟連接結(jié)合的方式來與依賴包關(guān)聯(lián)。

在 node_modules 根目錄有一個文件夾 .pnpm,這里包含了項(xiàng)目所有依賴。
根目錄下 axios 軟連接到 .pnpm 目錄下的 axios 文件夾中,展開 .pnpm/axios@16.1 的node_modules 文件夾,其中有 axios 所需的依賴,包含 axios、follow-redirects、form-data、proxy-from-env,其中 axios 硬鏈接到磁盤中(即與 pnpm 倉庫保存的地址一致),其它文件軟連接到 .pnpm 的自身位置。

node_modules 根目錄下的依賴,軟連接到 .pnpm 文件夾中,如果有相互依賴的關(guān)系,仍然通過軟連接,只有找到依賴自身,才會通過硬鏈接找到磁盤中的位置,這樣可以保證同一個項(xiàng)目里不同依賴也不會重復(fù)安裝,同時不同項(xiàng)目之間的相同依賴也無需在磁盤中存儲多份。

以上就是pnpm管理依賴包如何節(jié)省磁盤空間詳解的詳細(xì)內(nèi)容,更多關(guān)于pnpm依賴包磁盤空間的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • node.js之基礎(chǔ)加密算法模塊crypto詳解

    node.js之基礎(chǔ)加密算法模塊crypto詳解

    這篇文章主要介紹了node.js之基礎(chǔ)加密算法模塊crypto詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • 如何利用node實(shí)現(xiàn)靜態(tài)文件緩存詳解

    如何利用node實(shí)現(xiàn)靜態(tài)文件緩存詳解

    HTTP 緩存機(jī)制作為 Web 應(yīng)用性能優(yōu)化的重要手段,對于從事 Web 開發(fā)的同學(xué)們來說,應(yīng)該是知識體系的基礎(chǔ)環(huán)節(jié),也是想要成為前端架構(gòu)的必備技能,這篇文章主要給大家介紹了關(guān)于如何利用node實(shí)現(xiàn)靜態(tài)文件緩存的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • node中http模塊的使用及執(zhí)行流程

    node中http模塊的使用及執(zhí)行流程

    http這個模塊的職責(zé)就是幫你創(chuàng)建編寫服務(wù)器,接下來通過本文給大家介紹node中http模塊的使用及執(zhí)行流程,感興趣的朋友一起看看吧
    2021-09-09
  • 如何刪除所有node_modules和package-lock配置文件

    如何刪除所有node_modules和package-lock配置文件

    這篇文章主要介紹了如何刪除所有node_modules和package-lock配置文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 在Node.js中使用TypeScript的方法示例

    在Node.js中使用TypeScript的方法示例

    在前端開發(fā)中,隨著TypeScript的不斷普及,越來越多的開發(fā)者使用TypeScript進(jìn)行開發(fā),然而,在后端開發(fā)中,在Node.js中使用 TypeScript還是相對較少見的,這篇文章將介紹如何在Node.js中配置TypeScript ,以及如何使用TypeScript來開發(fā)高質(zhì)量的應(yīng)用程序
    2023-06-06
  • 使用node.js實(shí)現(xiàn)微信小程序?qū)崟r聊天功能

    使用node.js實(shí)現(xiàn)微信小程序?qū)崟r聊天功能

    在微信這個聊天工具里的小程序上實(shí)現(xiàn)聊天功能,總覺得很詫異,今天小編給大家?guī)砹耸褂胣ode.js實(shí)現(xiàn)微信小程序?qū)崟r聊天功能,感興趣的朋友一起看看吧
    2018-08-08
  • nodejs中的http模塊與npm模塊使用

    nodejs中的http模塊與npm模塊使用

    這篇文章主要介紹了nodejs中的http模塊與npm模塊使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 用node和express連接mysql實(shí)現(xiàn)登錄注冊的實(shí)現(xiàn)代碼

    用node和express連接mysql實(shí)現(xiàn)登錄注冊的實(shí)現(xiàn)代碼

    本篇文章主要介紹了用node和express連接mysql實(shí)現(xiàn)登錄注冊的實(shí)現(xiàn)代碼,具有一定的參考價值,有興趣的可以了解一下
    2017-07-07
  • Node.js中JWT實(shí)現(xiàn)身份驗(yàn)證的詳細(xì)步驟

    Node.js中JWT實(shí)現(xiàn)身份驗(yàn)證的詳細(xì)步驟

    身份驗(yàn)證是Web開發(fā)的重要組成部分,JWT由于其簡單性,安全性和可擴(kuò)展性,已成為在Web應(yīng)用程序中實(shí)現(xiàn)身份驗(yàn)證的流行方法,在這篇文章中,我將指導(dǎo)你在Node.js應(yīng)用程序中使用MongoDB進(jìn)行數(shù)據(jù)存儲來實(shí)現(xiàn)JWT身份驗(yàn)證,需要的朋友可以參考下
    2024-12-12
  • 利用nodejs監(jiān)控文件變化并使用sftp上傳到服務(wù)器

    利用nodejs監(jiān)控文件變化并使用sftp上傳到服務(wù)器

    這篇文章主要介紹了利用nodejs監(jiān)控文件變化并使用sftp上傳到服務(wù)器的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02

最新評論

凤翔县| 晋中市| 威远县| 朔州市| 揭阳市| 南充市| 南丹县| 莱芜市| 河池市| 英山县| 兴安县| 石城县| 华宁县| 焦作市| 原平市| 平谷区| 乐东| 望谟县| 北海市| 霍山县| 阜新市| 延长县| 灵山县| 鹤山市| 乌拉特中旗| 木兰县| 定结县| 武冈市| 河津市| 无棣县| 抚远县| 扶风县| 遂昌县| 射洪县| 齐齐哈尔市| 富民县| 怀仁县| 牡丹江市| 烟台市| 宣恩县| 新疆|