1. 程式人生 > 其它 >node前端專案,package.json檔案中“devDependencies"和"dependencies”的區別?

node前端專案,package.json檔案中“devDependencies"和"dependencies”的區別?

這兩個欄位本意是為了加快專案下載依賴速度的。

比如可能存在單元測試、程式碼格式化等依賴項外掛,這些依賴項對於這個專案本身而言並不是匯入的模組,而是在開發時才需要用到,那麼對於僅僅想執行一下專案、而非要開發專案的人來說,也必須npm install一遍。可你要知道npm早期版本可是以安裝慢著稱的(雖然從 npm 5.0 之後已經有很大改善了)。

所以搞出來了兩個欄位,如果只是想跑一遍專案,那麼npm install --production就好了,這樣只會下載安裝dependencies裡的依賴項。

但對於現在的前端來說,如果不是工具庫的開發者,那麼 Webpack 一類的 Bundle 工具基本就是必需品(Vue、React,三大框架中的倆依賴於此)。你說babel

之類的依賴項,算dependencies裡吧可你又的確沒在專案裡import Babel from 'babel'過;算devPependencies裡吧可你真要npm install --production不安裝它的話專案還是跑不起來。所以這倆欄位就變成了一個比較雞肋的存在

一般來說的話,在執行階段依賴的項,放到dependencies裡;僅僅在開發、測試、編譯階段依賴的項,放到devPependencies。遵循這個原則就可以了。

P.S. 中文網路上會流傳一些錯誤的說法,比如 Webpack 不會打包devPependencies下的程式碼啊 balabala,對此我的建議是:不要搜中文技術文章,全是錯的還互相抄。

這倆欄位語義不一樣。

‘devDependencies’ 是說,開發此專案的時候你會用到的任何包,一般是工具類包比如各大 CLI 框架打包工具, package.json scripts 裡要用到的一些命令列工具,以及測試框架工具之類的。這個欄位的用途是記錄開發這個專案過程中需要用到哪些包,你在清除 node_modules 的時候或者別人 git clone 你的專案的時候能輕鬆還原你的開發環境。

‘dependencies’ 是說,你這個專案作為一個 npm 包給別人用的時候,在執行時還需要依賴什麼其他的包才能滿足你的執行要求。前提是你的這個專案是打算以 npm 包的形式釋出到某個 registry 給別人用的(或者本地 npm link)。 這個欄位裡宣告的依賴會在別人安裝你的時候被一併安裝進來,而且這個過程是遞迴的。不管別人把你當作 dependence 還是 devDependence 安裝。

綜上:

  1. 如果你的這個前端專案並不是一個庫,不需要釋出到 npm 倉庫供別人安裝使用,那麼宣告在dependencies 和 devDependencies 中的依賴沒有大的區別。按語義講的話,你應該把依賴都放到 devDependencies 裡。
  2. 如果你的這個前端專案需要釋出到 npm 倉庫供別人 npm install 的話,你就要小心你最終的 package.json 裡宣告的 dependencies 了。

轉載:https://www.h5w3.com/43735.html