webpack從入門到精通(高級(jí)篇)

1.提升開發(fā)體驗(yàn)

SourceMap技術(shù)

作用:準(zhǔn)確找到報(bào)錯(cuò)位置淀弹,便于開發(fā)

用法:

開發(fā)模式:cheap-module-source-map

優(yōu)點(diǎn):打包編譯速度快傅瞻,只包含行映射

缺點(diǎn):沒有列映射

生產(chǎn)模式:source-map

優(yōu)點(diǎn):包含行/列映射

缺點(diǎn):打包編譯速度更慢

2.提升打包構(gòu)建速度

HMR:熱更新赤炒,只更新編譯的部分而不是刷新整個(gè)界面,想要實(shí)現(xiàn)js頁面需要單獨(dú)配置或者引入所需loader

oneOf:每個(gè)文件只能被其中一個(gè)loader配置處理

Include/Exclude

Include:只處理XXX文件

Exclude:處理XXX文件以外其他文件都處理

注意:只能用一種。兩個(gè)同時(shí)用會(huì)報(bào)錯(cuò)

Cache

對eslint檢查和Babel編譯結(jié)果進(jìn)行緩存

Thead

多進(jìn)程打包:開啟電腦的多個(gè)進(jìn)程干一件事,速度更快

使用:

1.獲取CUP的核數(shù)

2.下載包

npm i thread-loader -D

3.配置

獲取cpu核數(shù)
eslint配置開啟

3.減少代碼體積

Tree Shaking

移除js中沒有使用上的代碼

Babel

@babel/plugin-transform-runtime:禁用Babel自動(dòng)對每個(gè)文件的runtime注入帮非,而是引入

1.下載包

npm i @babel/plugin-transform-runtime -D

2.配置

Image Minimizer

是什么:

image-minimizer-webpack-plugin:用來壓縮圖片的插件

用法:

1.下載包

npm i?image-minimizer-webpack-plugin imagemin -D

無損壓縮:

npm i imagemin-gifsicle imagemin-jpegtran imagemin-optipng imagemin-svgo -D?

有損壓縮:

npm i imagemin-gifsicle imagemin-mozjpeg imagemin-pngquant imagemin-svgo -D?

2.配置

4優(yōu)化代碼運(yùn)行性能

codeSplit

是什么:

代碼分割:將打包生成的文件進(jìn)行分割,生成多個(gè)js文件

按需加載:需要哪個(gè)文件就加載那個(gè)文件


Preload/Prefetch

在瀏覽器空閑時(shí)加載后續(xù)需要使用的資源

preload:告訴瀏覽器立即加載資源讹蘑。

prefetch:告訴瀏覽器在空閑時(shí)才開始加載資源

共同點(diǎn):

都會(huì)加載資源但不執(zhí)行

都有緩存

區(qū)別:

preload優(yōu)先級(jí)高末盔,prefetch優(yōu)先級(jí)低

preload只能加載當(dāng)前頁面所需要使用的資源,prefetch可以加載當(dāng)前頁面資源座慰,也可以加載下一個(gè)頁面需要使用的資源

總結(jié):

當(dāng)前頁面優(yōu)先級(jí)高的資源用preload加載

下一頁面需要使用的資源用preload加載

怎么用:

1.下載包

npm i --save-dev @vue/preload-webpack-plugin

2.引入

3.配置

core-js

處理ES6及以上API的polyfill

polyfill翻譯過來叫墊片/補(bǔ)丁陨舱。讓我們在不兼容某些新特性的瀏覽器上,使用該新特性

怎么用

1.下載包

npm i core-js

2.引入

全局引入不需要的因會(huì)被引入 體積太大版仔,手動(dòng)引入太麻煩所以用以下這種方式

在babel中配置

PWA

項(xiàng)目在離線時(shí)應(yīng)用程序能夠繼續(xù)運(yùn)行功能

怎么用

1.下載包

npm i workbox-webpack-plugin --save-dev

2.配置

在main.js文件配置
在config中配置
在config中配置

總結(jié)

從4個(gè)角度對webpack和代碼進(jìn)行優(yōu)化

1.提升開發(fā)體驗(yàn)

使用Source Map讓開發(fā)上線時(shí)代碼報(bào)錯(cuò)能力更加準(zhǔn)確的錯(cuò)誤提示

2.提升webpack打包構(gòu)建速度

使用HotModuleReplacement讓開發(fā)時(shí)之重新編譯打包更新變化了的代碼游盲,不變的代碼使用緩存,從而使更新速度更快

使用Oneof讓資源一旦被某個(gè)loader處理就不繼續(xù)遍歷了蛮粮,打包速度更快

使用Include/Exclude排除或只檢測某些文件益缎,處理的文件更少,速度更快

使用Cache對eslint和babel處理的結(jié)果進(jìn)行緩存蝉揍,第二次打包速度更快

使用Thead多進(jìn)程處理eslint和babel任務(wù),速度更快畦娄。

3.減少代碼體積

使用Tree Shaking剔除了沒有使用的多于代碼又沾,讓代碼體積更小

使用@babel/plugin-transform-runtime插件對babel進(jìn)行處理弊仪,讓輔助代碼從中引入,而不是每個(gè)文件都生成輔助代碼杖刷,從而體積更小

使用Image Minimizer對項(xiàng)目中圖片進(jìn)行壓縮励饵,體積更小請求速度更快

4.優(yōu)化代碼運(yùn)行性能

使用Code Split對代碼進(jìn)行分割成多個(gè)js文件,從而使單個(gè)文件體積更小滑燃,并行加載js速度更快役听。并通過import動(dòng)態(tài)導(dǎo)入語法進(jìn)行按需加載,從而達(dá)到需要時(shí)才加載該資源表窘,不用時(shí)不加載資源

使用Preload/Prefetch對代碼進(jìn)行提前加載典予,等未來需要使用時(shí)直接使用,讓用戶體驗(yàn)更好

使用Network Cache能對輸出資源文件進(jìn)行更好的命名乐严,將來好做緩存

使用core-js 對js進(jìn)行兼容處理

使用PWA讓項(xiàng)目在離線狀態(tài)下也能訪問

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瘤袖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子昂验,更是在濱河造成了極大的恐慌捂敌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件既琴,死亡現(xiàn)場離奇詭異占婉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)甫恩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門逆济,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人填物,你說我怎么就攤上這事纹腌。” “怎么了滞磺?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵升薯,是天一觀的道長。 經(jīng)常有香客問我击困,道長涎劈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任阅茶,我火速辦了婚禮蛛枚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脸哀。我一直安慰自己蹦浦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布撞蜂。 她就那樣靜靜地躺著盲镶,像睡著了一般侥袜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上溉贿,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天枫吧,我揣著相機(jī)與錄音,去河邊找鬼宇色。 笑死九杂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宣蠕。 我是一名探鬼主播例隆,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼植影!你這毒婦竟也來了裳擎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤思币,失蹤者是張志新(化名)和其女友劉穎鹿响,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谷饿,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惶我,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了博投。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绸贡。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖毅哗,靈堂內(nèi)的尸體忽然破棺而出听怕,到底是詐尸還是另有隱情,我是刑警寧澤虑绵,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布尿瞭,位于F島的核電站,受9級(jí)特大地震影響翅睛,放射性物質(zhì)發(fā)生泄漏声搁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一捕发、第九天 我趴在偏房一處隱蔽的房頂上張望疏旨。 院中可真熱鬧,春花似錦扎酷、人聲如沸檐涝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谁榜。三九已至拉岁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惰爬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工惫企, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撕瞧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓狞尔,卻偏偏與公主長得像丛版,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子偏序,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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