真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Node包管理發(fā)展的階段有哪些

本文小編為大家詳細介紹“Node包管理發(fā)展的階段有哪些”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“Node包管理發(fā)展的階段有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

創(chuàng)新互聯(lián)是一家專業(yè)提供青原企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計、網(wǎng)站制作、H5場景定制、小程序制作等業(yè)務(wù)。10年已為青原眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進行中。

階段一:刀耕火種

正確來說,Node是不存在沒有包管理器時期的,2009年,Node.js 問世時 npm的雛形也發(fā)布了。

npm 全稱 Node.js Package Manager;從A brief history of Node.js 里面可以看到

2009 
Node.js is born 
The first form of npm is created

下面聊一下沒有出現(xiàn)Node包管理器時期是怎樣的,那時候做的更多的事情就是

  • 網(wǎng)上尋找各軟件的官網(wǎng),比如 jQuery;

  • 找到下載地址,下載 zip 包;

  • 解壓,放到項目中一個叫 libs 的目錄中;

  • 想更方便的話,直接將 cdn 鏈接粘貼到 HTML 中

那時候 模塊化管理?版本號管理?依賴升級?都不存在的!

階段二:嵌套安裝

2009 年,Node.js 誕生,npm的雛形也正在醞釀,2011年發(fā)布了 1.0 版本;npm是圍繞著語義版本控制 semver 的思想而設(shè)計的,默認認為Node包開發(fā)者,在升級依賴包自定義版本號時,都會按照 semver 規(guī)范升級版本號。

代名詞:Node包管理規(guī)范化、node_modules 目錄嵌套存放依賴

代表產(chǎn)物:npm v1、v2 版本

關(guān)鍵特點:

(1)依賴包嵌套安裝,相同版本的依賴會被冗余安裝

(2)依賴包安裝不確定性:默認裝最新次版本的依賴包(可設(shè)置固定版本)

(3)串行安裝依賴,速度慢;不支持離線緩存

解釋1:依賴嵌套安裝,如果A依賴B、B依賴C,node_modules目錄如下

node_modules
- package-A
-- node_modules
--- package-B
----- node_modules
------ package-C
-------- some-really-really-really-long-file-name-in-package-c.js

問題:依賴嵌套過多會造成嵌套地獄,與此同時會出現(xiàn)大量相同依賴包的冗余安裝,造成 node_modules 體積過大,需要程序員定期的 rm -rf node_modules,但windows系統(tǒng),很多程序無法處理超過260個字符的文件路徑名,早期 npm 的 windows 用戶都見過這個彈窗

Node包管理發(fā)展的階段有哪些


解釋2:針對每次 npm install 默認安裝最新次版本依賴,造成的依賴安裝不確定性問題:

semver 規(guī)范了版本號構(gòu)成:X.Y.Z-[state],版本號升級規(guī)范如下

  • X 是主版本號: API 產(chǎn)生的變化,與舊版本不兼容時,升級主版本號

  • Y 是次版本號: 增加了新的API,但向后兼容,升級次版本號

  • Z 是補丁版本號: 當做了向后兼容的缺陷修復(fù)的時候

  • state 可以是:alpha(內(nèi)測)、beta(公測)、gamma(相當成熟的測試版)、rc(預(yù)發(fā)布)

版本不確定原因:執(zhí)行 npm 默認安裝依賴指令時,npm 認為開發(fā)者都會遵循 semver 版本升級規(guī)范,直接給開發(fā)者安裝 了最新次版本的依賴包

  • 解決方案1:可以通過npm config set save-exact true命令關(guān)閉在版本號前面使用 ^的默認行為

  • 總結(jié):無法解決依賴庫自己的依賴默認安裝最新次版本的問題

  • 解決方案2:npm提供了 shrinkwrap 命令,會生成一個 npm-shrinkwrap.json 文件,為所有庫和所有嵌套依賴的庫記錄精準的版本

  • 總結(jié):鎖文件不會默認生成,需要用戶手動執(zhí)行指令;依賴于用戶知道這個指令,相對繁瑣

階段三:扁平化安裝

2015年,為解決 npm1、npm2 存在的 嵌套安裝、版本不規(guī)定問題,完全重寫了 npm 程序

代名詞:較少冗余依賴的安裝、node_modules 目錄扁平化存放依賴

代表產(chǎn)物:npm v3版本

原理簡述:npm install時,先構(gòu)建依賴樹再將所有依賴都安裝在 node_modules 根目錄,子依賴遇到不同版本的重名依賴時,會將子依賴安裝在自己node_modules下

關(guān)鍵特點:

(1)減少冗余安裝:依賴扁平化安裝,一定情況下減少了冗余包的安裝

存在的問題

(1)“幽靈依賴”、“幻影依賴” 問題

(2)“雙胞胎陌生人” 、“依賴包分身” 問題

(3)目錄不固定:依賴的安裝順序,決定了 node_module 目錄結(jié)構(gòu)

解釋1:依賴的依次安裝順序,決定了node_modules 目錄結(jié)構(gòu)

如下場景:App1 依賴 packageA 和 packageC 和 packageG 和 packageH,而 packageA 和 packageC 都依賴了 packageB v1.0,packageG、packageH 都依賴 packageB 的 v2.0 版本

如果先安裝 packageA 或 packageC,node_modules 目錄如下

Node包管理發(fā)展的階段有哪些

如果先安裝 packageG 或 packageH,node_modules 目錄如下

Node包管理發(fā)展的階段有哪些

針對如上情況,npm 提供了指令 npm dedupe,可以手動整理&簡化 node_modules 的目錄結(jié)構(gòu),整理后的 node_modules 目錄結(jié)構(gòu)是一致的,不受依賴包安裝順序影響

解釋2:不一定能減少冗余包的安裝

通過舉例1,可以看出雖然依賴包扁平化安裝,但仍存在相同版本的依賴包,有冗余包

解釋3:“雙胞胎陌生人” 問題

參考舉例1中,相同版本的依賴包,被安裝兩次,被放置到兩處,這種現(xiàn)象被稱為“雙胞胎陌生人”

解釋4:“幽靈依賴” 問題

node_modules 一級目錄下的依賴包,開發(fā)者可以直接使用,但依賴包沒定義在 package.json 中,這樣的依賴包被稱為 “幽靈依賴”,前端項目中使用 “幽靈依賴”,后期可能會出現(xiàn)問題。

因為后期可能伴隨著 其他依賴的升級移除了這個“幽靈依賴”,此時 node_modules 中就不存在了,執(zhí)行 npm install 時,并不會主觀的去安裝 “幽靈依賴”,導(dǎo)致項目找不到依賴包,然后報錯。

階段四:安全、提速

2016年,yarn、pnpm release 版本相繼出現(xiàn),在一定程度上解決了之前的 安裝版本不確定、安裝速度慢等問題,yarn 率先推出的能力相比于 npm,更奪人眼球,保證了一致性&安全性,提升了安裝速度

代名詞:依賴安裝相對安全、提速

代表產(chǎn)物:yarn release版本、pnpm release版本、npm v5 版本(npm v4沒有太大變化,v5向前邁了一大步)

關(guān)鍵特點:

(1)安全:默認生成版本鎖文件,保證了每次安裝依賴版本都一樣

(2)提速:增加了緩存離線安裝、并行安裝、安裝異常后自動重試

(3)workspace:yarn從v1版本開始支持,可以高效管理多個項目的依賴包;npm v7才支持 workspace

存在的問題

(1)幽靈依賴

(2)依賴包單項目重復(fù)安裝、跨項目重復(fù)安裝

(3)目錄不固定:依賴的安裝順序,決定了 node_module 目錄結(jié)構(gòu)

解釋1:關(guān)于安全

yarn v0.x 版本率先、npm v5.x 版本緊跟其后,下載依賴時,默認生成 依賴鎖文件,精確地將版本鎖定在一個值

  • yarn 的 .lock 文件:只是記錄安裝的依賴版本,需要結(jié)合 package.json 來確定 node_modules 目錄結(jié)構(gòu)

  • npm 的 .lock 文件:記錄了安裝的依賴版本 及 node_modules 目錄結(jié)構(gòu)

總結(jié):避免了不同終端安裝依賴時版本不一致問題,但“依賴幽靈” 問題仍然存在

解釋2:關(guān)于提速 - 離線緩存

npm v2版本 就支持了緩存,但需要聯(lián)網(wǎng)檢測,才能使用 緩存的依賴

yarn v0.x版本 率先支持了 離線緩存,從網(wǎng)絡(luò)下載的包都會緩存到全局,下次安裝優(yōu)先從本地找,找到直接copy

npm v5版本 重寫了緩存系統(tǒng),也支持了離線安裝,安裝速度大大提升

解釋3:關(guān)于提速 - 并行安裝

yarn 率先支持了依賴包并行安裝,此前 npm 串行安裝依賴,后來 npm 也優(yōu)化了并行安裝

解釋4:安裝依賴后,自動整理 node_modules 目錄

起始時間:yarn v1.x 版本、npm v4.x 版本

  • 如果項目中刪除了 .lock 文件,初始化安裝依賴時,會自動整理 node_modules 目錄;npm v4.x之前版本,需要用戶手動執(zhí)行指令 npm dedupe整理依賴目錄

  • 由于 node_modules 是扁平化管理依賴,深層依賴可能會被安裝到一級目錄下;當項目中再安裝不同版本的依賴時,遇到依賴版本沖突,會自動將深層依賴從一級目錄移動到父依賴目錄下 【已驗證】

階段五:更安全、高速、低耗

對著 pnpm 的成熟,開發(fā)者們享受著 pnpm 帶來的 更安全、更高速、存儲更低耗 等紅利,解決了“幽靈依賴” 問題,解決了重復(fù)依賴問題

代名詞:安全(依賴安裝所見即所得)、高速(不重復(fù)安裝)、存儲低耗(硬鏈接 + 軟鏈接)

代表產(chǎn)物:pnpm

關(guān)鍵特點:

(1)速度極快:存儲中心集中管理依賴,直接硬鏈接到項目的 node_modules/.pnpm 中。相比于之前的工作方式,減少了從全局 node_modules copy 到項目內(nèi)的大量 IO 操作

(2)磁盤利用率極高

  • 跨項目共用相同版本的依賴:硬鏈接、軟鏈接

  • 最大限度的復(fù)用同一依賴的不同版本:只增加存儲不同版本的 Diff 文件

(3)安全性高:node_modules 目錄結(jié)構(gòu)就是 package.json 依賴列表,解決了 “幽靈依賴” 問題

Node包管理發(fā)展的階段有哪些

性能表現(xiàn)如下:

Node包管理發(fā)展的階段有哪些

讀到這里,這篇“Node包管理發(fā)展的階段有哪些”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


名稱欄目:Node包管理發(fā)展的階段有哪些
文章源于:http://weahome.cn/article/pcdjcj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部