當(dāng)我們項(xiàng)目需要下載一個(gè)模塊的時(shí)候,我們安裝npm包(在項(xiàng)目目錄下面npm install module_name)的時(shí)候,很多時(shí)候我們會在后面加上–save-dev 或 –save。這兩個(gè)參數(shù)代表什么呢?
初識
相信很多人都會回答:
npm install module-name -save 自動把模塊和版本號添加到dependencies部分
npm install module-name -save-dev 自動把模塊和版本號添加到devdependencies部分
dependencies是什么呢? 生產(chǎn)環(huán)境。
devdependencies是什么呢? 開發(fā)環(huán)境。
網(wǎng)上也可以查到很多資料,大概回答意思是,我們搭建一個(gè)webpack+react+es6的項(xiàng)目,像webpack babel這種負(fù)責(zé)打包編譯的,我們就應(yīng)該裝在開發(fā)環(huán)境,像react之類的裝在生產(chǎn)環(huán)境。
可是為什么呢?
我們不能告訴我們這樣做,我們就只這樣做,我們要知之其所以然呀。
恩。我試著吧react放進(jìn)了dependencies,打包出來的文件依然可以運(yùn)行,并沒有什么問題。
why ???難道文檔只是建議而已嗎???
實(shí)質(zhì)區(qū)別
如果我們只是單純的做項(xiàng)目,那么我們可簡單地認(rèn)為生產(chǎn)環(huán)境和開發(fā)環(huán)境做為一種友善的提示,實(shí)質(zhì)沒有什么區(qū)別;但是,如果在發(fā)布npm包的時(shí)候,兩種環(huán)境安裝方式是有很大區(qū)別的?。?!
假設(shè)有以下兩個(gè)模塊:
模塊A
- devDependencies
模塊B
- dependencies
模塊C
模塊D
- devDependencies
模塊E
- dependencies
模塊A
npm install D的時(shí)候, 下載的模塊為:
- D
- A
- C
當(dāng)我們下載了模塊D的源碼,并且在根目錄下npm install, 下載的模塊為:
- A
- C
- E
所以,在發(fā)布npm包的時(shí)候,本身dependencies下的模塊會作為依賴,一起被下載;devDependencies下面的模塊就不會自動下載了;但對于項(xiàng)目而言,npm install 會自動下載devDependencies和dependencies下面的模塊。