vue-webpack項目配置以及打包流程詳解

vue-webpack項目配置以及打包流程詳解

我認為如果你要用webpack打包項目,首先你需要有一個思維的轉(zhuǎn)化制轰,傳統(tǒng)來說前端項目都是從html文件為入口開始運行項目演顾,但是你使用了webpack后就不能這么想了。webpack是依賴于node環(huán)境的露氮,node是基于commonjs模塊規(guī)范以及javaScript的后臺編程框架踪古,而前端html依賴的是瀏覽器環(huán)境含长,你看這個環(huán)境都變了,如果你以瀏覽器環(huán)境的思考方式來讀懂webpack打包伏穆,是不是勢必會出現(xiàn)很多相左之處呢拘泞?所以擁有一個node基礎以及webpack基本知識很重要,但更重要的是需要node思維也可以說是后端思維去看webpack打包枕扫,今天我從vue官方推薦的webpack工程化項目來解析項目配置以及流程陪腌,我會盡全力詳細全面的解析出來,希望對大家有幫助烟瞧,有不對的地方也希望大家能多多指教诗鸭。

1.啟動

開始啟動項目,進入項目目錄同時在終端輸入npm run dev,

這串腳本會有什么作用呢燕刻?npm是node的包管理工具只泼,這串腳本執(zhí)行的具體操作會在package.json的scripts配置項里有解釋剖笙。

如圖示npm run dev 相當于直接在終端執(zhí)行webpack-dev-server --inline --progress --config build/webpack.dev.conf.js卵洗,這段代碼的意思就是啟動一個webpack服務器,同時指定打包配置的文件build/webpack.dev.conf.js.這里有同學就有疑問了弥咪,為什么需要指定打包配置文件呢过蹂?官方默認不是webpack.config.js文件嗎?其實是因為不同的環(huán)境決定的聚至,對應什么環(huán)境你需要不同的配置文件酷勺,比如說我需要上線項目,這時我就需要配置一個production環(huán)境的配置扳躬,執(zhí)行npm run build脆诉。

上圖,我們經(jīng)常在一些項目里看見有很多這樣的配置文件贷币,在這里我做一個詳細的解釋击胜。

webpack.base.conf.js:這個配置是最基本的,也就是說不管是開發(fā)生產(chǎn)或者測試環(huán)境下都需要的配置役纹,比如說解析css偶摔,打包圖片等等。

webpack.dev.conf.js:這個文件是在開發(fā)環(huán)境下獨有的配置促脉。里面一般有啟動一個webpack服務器做熱更新辰斋,監(jiān)聽文件的改變策州,自動刷新等等,這些配置有利于開發(fā)過程的操作宫仗。

webpack.prod.conf.js:生產(chǎn)環(huán)境的配置够挂,(正式環(huán)境會做一些壓縮/分包/提取公共文件的操作,簡單來說就是更全面藕夫,代碼更優(yōu)化)

webpack.test.conf.js: 測試環(huán)境的配置下硕,(有利于測試環(huán)境的包,根據(jù)具體的需求來配置)

除了以上幾個配置文件外大家還會經(jīng)持ǎ看見

webpack.ssr.js: 服務器渲染的文件

webpack.dll.js:(預編譯資源模塊梭姓,對基礎組件或者框架進行分包,有利于提升打包速度)

2.webpack.base.conf.js

打開此配置文件嫩码,我們一步步的分析誉尖。

首先看見的是require(),不知道此時會不會覺得有疑問呢铸题?之前我們說了webpack是基于node環(huán)境铡恕,node其中一個非常重要的概念就是commonjs模塊化管理工具。node支持module丢间,global探熔,require()這三個全局變量,只要你的項目有package.json文件就說明你的項目是一個node包烘挫,你就可以任意使用這三個全局變量诀艰。所以在這里看見require也就不稀奇了。在node中饮六,所有的js文件都會被單獨看成一個模塊其垄,可以通過這種方式被引用。我們來看第一行const utils = require('./utils’)卤橄,這里引用的是utils.js绿满。common.js默認省略后綴.js。在這里有一個疑問有些模塊的引入是相對路徑有的就只是一個模塊名窟扑。其實這跟common.js的模塊引入相關(guān)喇颁,只有一個模塊名的是內(nèi)置模塊,require將直接返回模塊嚎货。如果模塊是以”./”橘霎、“/”、“../”會在項目里面去查找js文件厂抖。具體的可以點擊以下鏈接(http://www.w3cbus.com/nodejs/module.html)茎毁。

2.1進入webpack.base.conf.js,基本配置文件。

以上是文件較重要的幾個部分七蜘,我稍微做一下解析谭溉,我們可以看見webpack的入口文件是main.js。webpack的入口只能是一個js文件橡卤,因為webpack只認識js與json文件扮念。一個項目最重要的就是入口,沒有入口就算你的項目再牛*碧库,也不可能運行柜与。這里我對瀏覽器入口與webpack打包入口做一個解析,防止大家暈??嵌灰。瀏覽器環(huán)境下入口是index.html文件弄匕,但是在webpack環(huán)境下我們的入口‘變了’,為什么這里要加一個引號呢沽瞭?因為這個變并不是真正的變化迁匠。你要記住的是瀏覽器環(huán)境下的入口永遠只能是html文件。這里的入口指的是webpack打包入口驹溃。最后在瀏覽器運行時的入口還是html文件城丧,html會把打包出來的js文件通過script標簽引入(后面看運行結(jié)果的源代碼)。由于webpack只認識js與json文件豌鹤,其他文件需要通過loader轉(zhuǎn)化成webpack認識的文件亡哄。其實loader的本質(zhì)就是一個函數(shù)。由于此項目是vue官方推薦的初始化項目布疙,里面涉及到的文件較少所以loader較少蚊惯,一般還需要css-loader,less-loader,raw-loader等等。

(此文件中很多語法大家可能會覺得莫名其妙拐辽,大家看webpack官網(wǎng)就能找到源頭拣挪,不要頭大喲擦酌!慢慢看你的努力是會得到回報的https://www.webpackjs.com/concepts/俱诸,官網(wǎng))

2.2插件。

回到webpack.dev.conf.js赊舶,這一節(jié)來說一下插件配置睁搭,其實可以把插件理解成loader不能完成的都交給插件完成。以下是配置文件中使用的插件

除了以上幾個插件平時我們還會使用

UglifywebpackPlugin壓縮js

SplitChunkPlugin進行公共腳本分離

ZipWebpackPlugin:將打包出的資源生成一個zip包

ExtractTextWebpackPlugin:將css從bundle.js中單獨提取成一個css文件等等笼平。

一般這幾種插件打正式包會用上园骆。

2.3文件中的dev-server說明

熱更新,其實使用的是webpack內(nèi)置的插件webpack-dev-server(WDS).一般是在開發(fā)環(huán)境下使用寓调,增加開發(fā)效率锌唾。在開發(fā)過程中當我們修改文件后需要手動的刷新瀏覽器,很不方便。你可以webpack-dev-server 后面加上—open參數(shù)晌涕,每當啟動服務器會自動打開瀏覽器而且有修改時瀏覽器自動刷新滋捶,這樣大大的提高了開發(fā)效率。WDS還有一個比較大的優(yōu)勢輸出的文件存在內(nèi)存余黎,沒有磁盤的I/O重窟,所以說構(gòu)建速度有一個大大的提升。詳細的配置說明打開可以在webpack官網(wǎng)上去了解惧财,后期我會對WDS的原理做一個細致的解析巡扇。

2.4

__dirname: node的全局變量,表示當前文件所在的目錄名垮衷,是絕對路徑厅翔。這個函數(shù)是去獲取絕對路徑。文件多處需要使用到搀突。

2.5打包出口output

在基本配置文件中我們可以看到有一個output出口配置知给,而且出口配置跟入口配置不一樣。

filename:’[name].js’,filename表示輸出的文件名描姚,[name]這稱作為文件指紋涩赢,如何來理解呢?就是給打包的文件一個標識轩勘。舉個例子筒扒,search.js打包出來的文件是search.js,index.js就是index.js文件不會混。一般還會加上[hash],比如說[name]_[hash].js.官網(wǎng)還有很多類型的文件指紋绊寻,大家有興趣可以多了解了解花墩。

path:輸出地址,也就是說打包結(jié)束的文件放在哪里澄步。config.build.assetsRoot,來找一一下

在這里冰蘑,文件最后會輸出到根目錄的dist目錄下面。那接下來我們就來看看輸出的文件吧村缸!

以上是對開發(fā)環(huán)境的webpack配置做一個梳理祠肥,并不是一字一句來說明的,如果大家有不懂的可以在下方留言梯皿,我們一起探究探究仇箱。

3.webpack.prod.conf.js

生產(chǎn)環(huán)境文件中我們會看見也有配置output,這時有人會想webpack.base.conf.js不是已經(jīng)配置了嗎东羹?那這兩者會不會有影響呢剂桥?這是出現(xiàn)了一個秘密武器,那就是webpack-merge插件属提,作用是組合配置权逗。

仔細閱讀上圖你就知道了,prod的output會覆蓋base的output。

4.打包

如果我們想看文件打包后的效果斟薇,首先我們應將package.json中的dev配置修改為

保存火惊,我們來運行npm run dev

如果出現(xiàn)以上的頁面就說明你打包成功了,此時我們可以看到項目目錄中多了一個文件夾dist,打開dist文件夾我們可以看見正是我們剛剛打包好的兩個文件奔垦。

4.1 index.html文件

引入了打包好的app.js文件屹耐。

我們用瀏覽器打開index.html。什么都沒有顯示椿猎,查看開發(fā)者工具的network,

app.js引入失敗惶岭,引入路徑問題,

將“/”去掉犯眠,重新刷新網(wǎng)頁按灶。

內(nèi)容就出來,成功筐咧。

以上就是我對vue官方給出的依賴webpack構(gòu)建的工程化項目的一個啟動解析鸯旁,以及對配置文件做的解析,后續(xù)我會就webpack的優(yōu)化/原理/打包/流程寫一些文章量蕊。希望大家有所收獲铺罢,最后希望能跟大家能天天開心。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末残炮,一起剝皮案震驚了整個濱河市韭赘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌势就,老刑警劉巖泉瞻,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苞冯,居然都是意外死亡袖牙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門舅锄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鞭达,“玉大人,你說我怎么就攤上這事巧娱〉镎” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵禁添,是天一觀的道長。 經(jīng)常有香客問我桨踪,道長老翘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮铺峭,結(jié)果婚禮上墓怀,老公的妹妹穿的比我還像新娘。我一直安慰自己卫键,他們只是感情好傀履,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著莉炉,像睡著了一般钓账。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上絮宁,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天梆暮,我揣著相機與錄音,去河邊找鬼绍昂。 笑死啦粹,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的窘游。 我是一名探鬼主播唠椭,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼忍饰!你這毒婦竟也來了泪蔫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤喘批,失蹤者是張志新(化名)和其女友劉穎撩荣,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饶深,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡餐曹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了敌厘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片台猴。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖俱两,靈堂內(nèi)的尸體忽然破棺而出饱狂,到底是詐尸還是另有隱情,我是刑警寧澤宪彩,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布休讳,位于F島的核電站,受9級特大地震影響尿孔,放射性物質(zhì)發(fā)生泄漏俊柔。R本人自食惡果不足惜筹麸,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雏婶。 院中可真熱鬧物赶,春花似錦、人聲如沸留晚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽错维。三九已至奖地,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間需五,已是汗流浹背鹉动。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宏邮,地道東北人泽示。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像蜜氨,于是被迫代替她去往敵國和親械筛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容