詳解dependencies 和devDependencies 的區(qū)別

我們都知道dependencies 和devDependencies 的是我們記錄當(dāng)前項(xiàng)目所使用依賴的地方,執(zhí)行npm install之后就會(huì)以這兩個(gè)對(duì)象為依據(jù)去下載我們當(dāng)前項(xiàng)目所需要的依賴包。那他們倆到底有什么區(qū)別呢?

首先從字面上來理解,devDependencies 指的就是開發(fā)環(huán)境所需要的依賴,而dependencies則是生產(chǎn)環(huán)境所需要的依賴了。當(dāng)然大部分文章也是這么描述的。說一些生產(chǎn)環(huán)境不需要用到的依賴放在devDependencies,生產(chǎn)環(huán)境需要的依賴放在dependencies。

但如果你真的是這樣認(rèn)為的那就大錯(cuò)特錯(cuò)了。事實(shí)并非如此,我們都知道工程化的構(gòu)建工具是通過分析依賴的引入來打包整個(gè)項(xiàng)目所需要用到的文件的。再加上不斷的優(yōu)化,three shaking的出現(xiàn),使得一些沒有被用到的包根本不會(huì)被打進(jìn)最終產(chǎn)物。所以即使我們在dependencies中寫了開發(fā)環(huán)境所需的包,但只要我們的代碼中沒有引入他,他都是不會(huì)被打包進(jìn)最終產(chǎn)物的。

換句話說,這兩個(gè)東西對(duì)于一個(gè)業(yè)務(wù)項(xiàng)目來說,依賴寫在哪兒都無所謂。都不會(huì)影響最終結(jié)果。但是規(guī)范的去歸類也是沒有任何問題的。

那么問題來了,既然依賴寫在哪兒都無所謂的話,為啥還要區(qū)分出這兩個(gè)屬性出來呢,干脆放在同一個(gè)屬性里不就好了。

仔細(xì)回想一下,上文說了,如果是對(duì)于一個(gè)業(yè)務(wù)項(xiàng)目來說,他沒有什么區(qū)別。那么對(duì)于其他項(xiàng)目是不是就會(huì)起到不一樣的作用了?

在去探秘之前,讓我們先回顧一下依賴安裝相關(guān)的知識(shí)。

當(dāng)我們下載一個(gè)外部依賴庫的時(shí)候,這個(gè)庫可能也依賴了別的庫,那么在下載的時(shí)候,當(dāng)然是需要把這個(gè)庫所依賴的庫也一起下載進(jìn)來。那么npm怎么知道這個(gè)庫依賴了哪些庫呢。答案當(dāng)然就是根據(jù)庫的package.json 文件中的dependencies來決定了。所以這個(gè)時(shí)候如果那個(gè)庫的dependencies沒有寫他所依賴的庫的話,是不是就會(huì)導(dǎo)致這個(gè)庫沒辦法正常運(yùn)行了。

講到這里是不是開始有點(diǎn)能理解這倆兄弟的作用了。當(dāng)我們在開發(fā)一個(gè)外部資源庫的時(shí)候,我們就需要嚴(yán)格的去區(qū)分dependencies 和devDependencies。嚴(yán)格的按照運(yùn)行時(shí)所依賴的庫和生產(chǎn)環(huán)境所以來的庫做區(qū)分,這樣才不會(huì)導(dǎo)致我們開發(fā)的庫被用戶使用時(shí)造成意想不到的錯(cuò)誤。npm在下載依賴庫的依賴的時(shí)候只會(huì)下載dependencies中的東西,不會(huì)去下載devDependencies的東西。如果我們將開發(fā)環(huán)境用到的庫寫到了dependencies中,那就會(huì)無故占用用戶的資源空間。因?yàn)檫@些東西用戶在使用的時(shí)候根本用不著。

當(dāng)然如果你的資源庫是一個(gè)已經(jīng)構(gòu)建過得包那就不會(huì)出現(xiàn)這樣的問題了,因?yàn)槟愕陌跇?gòu)建的過程中就已經(jīng)將所需的庫一起打包進(jìn)去了。當(dāng)然這樣的話你就需要配置你的暴露項(xiàng)為編譯后的產(chǎn)物,讓用戶直接引入編譯之后的代碼。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容