最近在學(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依然可以運(yùn)行,說明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
中的devDependencies
和dependencies
主要是用來區(qū)分環(huán)境的。
比如一個Node
項目,在開發(fā)環(huán)境下,你可以需要前端的一些依賴,webpack
、eslint
之類的,所以這些我們會丟在devDependencies
中。
然后等到項目要上線了,部署到了線上環(huán)境,實際上是不需要webpack
、eslint
這些鬼東西的,只需要代碼執(zhí)行時所依賴的第三方包,類似moment
、koa
什么的,所以我們放到dependencies
里邊。
那么這兩個究竟有什么區(qū)別呢?
當(dāng)在本地開發(fā)時,安裝依賴執(zhí)行npm install
,這樣會安裝所有的依賴。
而在線上環(huán)境時,執(zhí)行npm install --production
,這樣就會過濾掉devDependencies
中的依賴了。 :)
所以感覺你的疑惑好像有一丟丟跑偏了。。
With the --production flag (or when the NODE_ENV environment variable is set to production), npm will not install modules listed in devDependencies.
package.json
是和 npm 相關(guān)的,它和 webpack
沒有直接聯(lián)系,webpack
打包行為處理依賴的是webpack配置文件
。
dependencies
和 devDependencies
,最為顯著的區(qū)別在于:
npm包
發(fā)布在了npm上,然后別人npm install
使用了你的包,那么只有dependencies
下的模塊會作為依賴被下載。dependencies
和devDependencies
下的模塊會作為依賴被下載。回到npm
和webpack
的關(guān)系,你可以通過package.json
的scripts
字段來定義相關(guān)執(zhí)行命令。根據(jù)你的代碼所寫build: webpack
,你可以執(zhí)行npm run build
,它本質(zhì)上和命令行執(zhí)行webpack
是一樣的。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。