鍍金池/ 問答/數(shù)據(jù)庫  HTML/ webpack的開發(fā)模式和生產(chǎn)模式到底是什么?

webpack的開發(fā)模式和生產(chǎn)模式到底是什么?

最近在學(xué)習(xí)webpack4,老實說,快被折磨瘋了,被我自己折磨瘋了,因為我喜歡研究問題研究的很深,而這也給我?guī)淼暮芏嗟耐纯?,詳?xì)可以看我的主頁,最近提的問題(一些你可能從來沒有考慮過的問題)。

好了,我想問的是webpack的開發(fā)模式和生產(chǎn)模式到底是什么?或者說,開發(fā)模式做了些什么,生產(chǎn)模式做了些什么?

有人肯定說用于本地開發(fā)的就是開發(fā)模式啊,mode設(shè)為development,加上一些開發(fā)配置,比如devtool,熱更新之類的就是開發(fā)模式,可以在本地瀏覽器及時看到數(shù)據(jù),多好,這就是開發(fā)模式。

但我們在想的深入一點,我們都知道,webpack打包依賴于package.json,而package.json里有一個放置開發(fā)模式依賴的模塊devDependencies和一個放置生產(chǎn)模式依賴的dependencies,package.json里面有個開發(fā)模式devDependencies,webpack.config.js里有個開發(fā)模式mode:development,兩者什么關(guān)系?

webpack打包的時候,這個devDependencies干了什么?有人說沒有打包進(jìn)最后的js里,那么請看我之前提的問題,我把jquery模塊放在devDependencies里面,最后打包后的js依然可以運行,說明devDependencies里面的模塊被打包進(jìn)js里了(無論我mode設(shè)為什么值)

總結(jié)一下我的疑問,網(wǎng)上所言,devDependencies用于開發(fā)模式打包,dependencies用于生產(chǎn)模式打包,我并沒有看到效果,我只看到無論devDependencies和dependencies設(shè)為什么值,只要node_modules文件夾里有相應(yīng)的包最后都能成功打包,那么devDependencies用于開發(fā)模式打包,dependencies用于生產(chǎn)模式打包的意義在哪里,網(wǎng)上所言,究竟是什么意思,我哪里理解錯了?

最后還有一個疑問,即使網(wǎng)上說的是真的,devDependencies用于開發(fā)模式打包,dependencies用于生產(chǎn)模式打包,那我放在devDependencies里面的webpack模塊你生產(chǎn)模式都用不了,你怎么打包?

{
  "name": "vuetest",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "webpack"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "clean-webpack-plugin": "^0.1.19",
    "html-webpack-plugin": "^3.2.0",
    "webpack": "^4.16.5",
    "webpack-cli": "^3.1.0"
  },
  "dependencies": {
    "jquery": "^3.3.1"
  }
}

圖片描述

回答
編輯回答
安淺陌

package.json中的devDependenciesdependencies主要是用來區(qū)分環(huán)境的。

比如一個Node項目,在開發(fā)環(huán)境下,你可以需要前端的一些依賴,webpackeslint之類的,所以這些我們會丟在devDependencies中。
然后等到項目要上線了,部署到了線上環(huán)境,實際上是不需要webpack、eslint這些鬼東西的,只需要代碼執(zhí)行時所依賴的第三方包,類似moment、koa什么的,所以我們放到dependencies里邊。

那么這兩個究竟有什么區(qū)別呢?

當(dāng)在本地開發(fā)時,安裝依賴執(zhí)行npm install,這樣會安裝所有的依賴。
而在線上環(huán)境時,執(zhí)行npm install --production,這樣就會過濾掉devDependencies中的依賴了。 :)

所以感覺你的疑惑好像有一丟丟跑偏了。。

npm install | docs

With the --production flag (or when the NODE_ENV environment variable is set to production), npm will not install modules listed in devDependencies.
2018年6月19日 01:02
編輯回答
魚梓

package.json是和 npm 相關(guān)的,它和 webpack 沒有直接聯(lián)系,webpack打包行為處理依賴的是webpack配置文件

dependenciesdevDependencies,最為顯著的區(qū)別在于:

  • 如果你開發(fā)的項目作為一個npm包發(fā)布在了npm上,然后別人npm install使用了你的包,那么只有
    dependencies 下的模塊會作為依賴被下載。
  • 如果你身為作者在開發(fā)這個項目,那么dependenciesdevDependencies 下的模塊會作為依賴被下載。

回到npmwebpack的關(guān)系,你可以通過package.jsonscripts字段來定義相關(guān)執(zhí)行命令。根據(jù)你的代碼所寫build: webpack ,你可以執(zhí)行npm run build,它本質(zhì)上和命令行執(zhí)行webpack是一樣的。

2017年3月21日 14:48
編輯回答
冷咖啡

給人一種一腔熱情,方法不當(dāng)?shù)母杏X

別百度了,都是瞎扯。去看官方文檔吧。中文版也有。

一言以蔽之,跟package.json根本沒關(guān)系,mode只不過定義了常用的那些優(yōu)化:

  • 想用常用的生產(chǎn)優(yōu)化,就寫production
  • 想用常用的開發(fā)優(yōu)化,就寫develop
  • 想自己指定或者都不想用,就寫none

“常用”與否,全是webpack團隊欽定的。

2017年2月16日 02:30