【每日一題NO.68】NPM2與NPM3的區(qū)別


npm2?所有項(xiàng)目依賴是嵌套關(guān)系。而 npm3 為了改進(jìn)嵌套過(guò)多、套路過(guò)深的情況,會(huì)將所有依賴放在第二層依賴中(所有的依賴只嵌套一次,彼此平行,也就是平鋪的結(jié)構(gòu))
npm2 依賴安裝的時(shí)候比較簡(jiǎn)單,直接按照包依賴的樹(shù)形結(jié)構(gòu)下載填充本地目錄結(jié)構(gòu),也就是說(shuō)每個(gè)包都會(huì)將該包的依賴組織到當(dāng)前包所在的 node_modules 目錄中。npm3 則會(huì)對(duì)依賴安裝進(jìn)行了改造,采用扁平結(jié)構(gòu)的思路來(lái)組織依賴包的目錄結(jié)構(gòu)。具體的就是npm install的過(guò)程時(shí):按照 package.json 里依賴的順序依次解析,遇到新的包就把它放在第一級(jí)目錄,后面如果遇到一級(jí)目錄已經(jīng)存在的包,會(huì)先判斷該版本,如果版本一樣則忽略,否則會(huì)按照npm2的方式依次掛在依賴包目錄下。
關(guān)于扁平的目錄結(jié)構(gòu),yarn從出生那天就包含這個(gè)特性。yarn 的出現(xiàn)給 npm 帶來(lái)了巨大的壓力,后來(lái),npm 學(xué)習(xí)了 yarn 先進(jìn)的理念,不斷的對(duì)自身進(jìn)行優(yōu)化,到了npm6版本,npm幾乎完全解決了自身的問(wèn)題,并擁有了下邊的特性:
目錄扁平化 并行下載 本地緩存 使用package-lock記錄確切依賴 增加了大量的命令別名(解決命名不夠語(yǔ)義化的問(wèn)題) 內(nèi)置了npx,可以啟動(dòng)本地的CLI工具 極大的簡(jiǎn)化了控制臺(tái)輸出
所有《每日一題》的 知識(shí)大綱索引腦圖 整理在此:https://www.yuque.com/dfe_evernote/interview/everyday
你也可以點(diǎn)擊文末的 “閱讀原文” 快速跳轉(zhuǎn)

