webpack面試相關(guān)問題

https://blog.csdn.net/weixin_44135121/article/details/89873416
筆記https://blog.csdn.net/z591391960/article/details/105612471

實現(xiàn)一個loader和plugins

1. webpack 性能優(yōu)化 在進行項目打包的時候蔼囊,當使用babel-loader進行js兼容時沫屡,不需要將node_modules模塊下的所有js文件進行打包。

2. webpack loaders中的include/exclude有什么用柴梆?

3. 我什么時候在Webpack 2 module.rules中使用’use’和’loader’拂铡?

4. 【webpack】中resolveLoader的使用方法

5. 自定義 loader 去刪除全局console.log

6. plugin 和 loader 的區(qū)別?

loader

  • loader 是文件加載器壹无,能夠加載資源文件,并對這些文件進行一些處理感帅,諸如編譯斗锭,壓縮等,最終一起打包到指定的文件中失球。處理一個文件可以使用多個 loader岖是,loader 的執(zhí)行順序和配置文件是相反的,即最后一個 loader 最先執(zhí)行实苞,第一個 loader 最后一個執(zhí)行豺撑。第一個執(zhí)行的 loader 接收源文件內(nèi)容作為參數(shù),其他 loader 接收前一個執(zhí)行的loader 的返回值作為參數(shù)硬梁,最后執(zhí)行的 loader 會返回此模塊的 Javascript 源碼前硫。
  • 編寫自己的 loader 時需要引用官方提供的 loader-utils,調(diào)用 loaderUtils.getOptions(this) 拿到 webpack 的配置參數(shù)荧止,然后進行自己的處理。loader 本身僅僅是一個函數(shù)阶剑,接收模塊代碼的內(nèi)容跃巡,然后返回代碼內(nèi)容轉(zhuǎn)換后的結(jié)果,并且一個文件還可以連是的經(jīng)過多個 loader 轉(zhuǎn)化牧愁。
  • 一個 loader 的職責是單一的素邪,只需要完成一種轉(zhuǎn)化。如果一個源文件需要經(jīng)歷多步轉(zhuǎn)化才能正常使用猪半,就通過多個loader 去轉(zhuǎn)化兔朦。在調(diào)用多個 loader 去轉(zhuǎn)化一個文件時,每個 loader 會鏈式的順序執(zhí)行磨确,第一個 loader 將會拿到需處理的原內(nèi)容沽甥,上一個 loader 處理后的結(jié)果會傳給下一個接著處理。最后的 loader 將處理后的最終結(jié)果返回給 Webpack乏奥。

plugin

  • plugin 功能強大摆舟,loader 不能做的都是它做,它的功能要更加豐富。從 打包優(yōu)化和壓縮恨诱,到重新定義環(huán)境變量媳瞪,可以處理各種任務(wù)。
  • plugin 讓 webpack 的機制更加靈活照宝,它 在編譯過程中留下的一系列生命周期的鉤子蛇受,通過調(diào)用這些鉤子來實現(xiàn)在不同編譯結(jié)果時對原模塊進行處理。它的編譯是基于事件流來編譯的厕鹃,主要通過 taptable 來實現(xiàn)插件的綁定和執(zhí)行的龙巨,taptable 是基于發(fā)布訂閱執(zhí)行的插件架構(gòu),是用來創(chuàng)建聲明周期鉤子的庫熊响。調(diào)用 complier.hooks.run.tap 開始注冊旨别,創(chuàng)建 compilation,基于配置創(chuàng)建 chunks,在通過 parser 解析 chunks汗茄,使用模塊和依賴管理模塊之間的依賴關(guān)系秸弛,最后使用 template 基于 compilation 數(shù)據(jù)生成代碼結(jié)果。

7. webpack怎么處理圖片

https://www.jb51.net/article/161272.htm

8. webpack打包過程

9. 提升webpack打包速度

10. webpack機制是什么洪碳,主要哪幾部分

https://blog.csdn.net/weixin_43334673/article/details/107598708
https://blog.csdn.net/u014168594/article/details/77198729?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs
從啟動構(gòu)建到輸出結(jié)果一系列過程:

(1)初始化參數(shù):解析webpack配置參數(shù)递览,合并shell傳入和webpack.config.js文件配置的參數(shù),形成最后的配置結(jié)果瞳腌。

(2)開始編譯:上一步得到的參數(shù)初始化compiler對象绞铃,注冊所有配置的插件,插件監(jiān)聽webpack構(gòu)建生命周期的事件節(jié)點嫂侍,做出相應(yīng)的反應(yīng)儿捧,執(zhí)行對象的 run 方法開始執(zhí)行編譯。

(3)確定入口:從配置的entry入口挑宠,開始解析文件構(gòu)建AST語法樹菲盾,找出依賴,遞歸下去各淀。

(4)編譯模塊:遞歸中根據(jù)文件類型和loader配置懒鉴,調(diào)用所有配置的loader對文件進行轉(zhuǎn)換,再找出該模塊依賴的模塊碎浇,再遞歸本步驟直到所有入口依賴的文件都經(jīng)過了本步驟的處理临谱。

(5)完成模塊編譯并輸出:遞歸完事后,得到每個文件結(jié)果奴璃,包含每個模塊以及他們之間的依賴關(guān)系悉默,根據(jù)entry配置生成代碼塊chunk。

(6)輸出完成:輸出所有的chunk到文件系統(tǒng)溺健。

注意:在構(gòu)建生命周期中有一系列插件在做合適的時機做合適事情麦牺,比如UglifyPlugin會在loader轉(zhuǎn)換遞歸完對結(jié)果使用UglifyJs壓縮覆蓋之前的結(jié)果钮蛛。

11. 常用loader和plugin

loader

file-loader:文件加載。
url-loader:文件加載剖膳,可以設(shè)置閾值魏颓,小于時把文件 base64 編碼。
image-loader:加載并壓縮圖片吱晒。
json-loader:webpack 默認包含甸饱。
babel-loader:ES6+ 轉(zhuǎn)成 ES5。
ts-loader:ts轉(zhuǎn)化為js仑濒。
awesome-typescript-loader:將 ts 轉(zhuǎn)換為 js叹话,性能更好。
css-loader:處理 @import 和 url 這樣的外部資源墩瞳。
style-loader:在 head 創(chuàng)建 style 標簽把樣式插入驼壶。
postcss-loader:擴展 css 語法,使用 postcss 各種插件 autoprefixer喉酌,cssnext热凹,cssnano。
eslint-loader,tslint-loader:規(guī)范代碼泪电。
vue-loader:加載 vue 單文件組件般妙。
i18n-loader:國際化。
cache-loader:性能開銷大的 loader 前添加相速,將結(jié)果緩存到磁盤碟渺。
svg-inline-loader:壓縮后的 svg 注入代碼。
source-map-loader:加載 source Map 文件突诬,方便調(diào)試苫拍。
expose-loader:暴露對象為全局變量。
import-loader攒霹,export-loader:可以向模塊注入變量或者提供導(dǎo)出模塊功能怯疤。
raw-loader:可以將文件以字符串形式返回。

plugin

ignore-plugin:忽略文件催束。
uglifyjs-webpack-plugin:webpack4之前,壓縮和混淆代碼伏社,不支持 ES6 壓縮抠刺。
terser-webpack-plugin:webpack4,壓縮和混淆代碼摘昌,支持 ES6 壓縮速妖。
webpack-parallel-uglify-plugin:多進程執(zhí)行代碼壓縮,提升構(gòu)建速度聪黎。
mini-css-extract-plugin:分離樣式文件罕容,css 提取為獨立文件,支持按需加載。
serviceworker-webpack-plugin:為網(wǎng)頁添加離線緩存功能锦秒。
clean-webpack-plugin:目錄清理露泊。
speed-measure-webpack-plugin:可以看見每個 loader 和 plugin 執(zhí)行耗時。
ProvidePlugin:自動加載模塊旅择,代替 require 和 import惭笑。
html-webpack-plugin:可以根據(jù)模板自動生成 html 代碼,并自動引用 css 和 js 文件生真。
extract-text-webpack-plugin:將 JS 文件中引用的樣式單例抽離成 css沉噩。
DefinePlugin:編譯時配置全局變量,這對開發(fā)模式和發(fā)布模式的構(gòu)建允許不同的行為非常有用柱蟀。
HosModuleReplacementPlugin:熱更新川蒙。
DllPlugin 和 DllReferencePlugin 相互配合,前者第三方包的構(gòu)建长已,只構(gòu)建業(yè)務(wù)代碼畜眨。
optimize-css-assets-webpack-plugin:不同組件中重復(fù)的 css 可以快速去重。
webpack-bundle-analyzer:一個 webpack 的 bundle 文件分析工具痰哨。
compression-webpack-plugin:生產(chǎn)環(huán)境可采用 gzip 壓縮 JS 和 CSS胶果。
happypack:通過多進程模型,來加速代碼構(gòu)建斤斧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末早抠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子撬讽,更是在濱河造成了極大的恐慌蕊连,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件游昼,死亡現(xiàn)場離奇詭異甘苍,居然都是意外死亡,警方通過查閱死者的電腦和手機烘豌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門载庭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人廊佩,你說我怎么就攤上這事囚聚。” “怎么了标锄?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵顽铸,是天一觀的道長。 經(jīng)常有香客問我料皇,道長谓松,這世上最難降的妖魔是什么星压? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮鬼譬,結(jié)果婚禮上娜膘,老公的妹妹穿的比我還像新娘。我一直安慰自己拧簸,他們只是感情好劲绪,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盆赤,像睡著了一般贾富。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上牺六,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天颤枪,我揣著相機與錄音,去河邊找鬼淑际。 笑死畏纲,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的春缕。 我是一名探鬼主播盗胀,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼锄贼!你這毒婦竟也來了票灰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤宅荤,失蹤者是張志新(化名)和其女友劉穎屑迂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冯键,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡惹盼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惫确。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片手报。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖改化,靈堂內(nèi)的尸體忽然破棺而出昧诱,到底是詐尸還是另有隱情,我是刑警寧澤所袁,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站凶掰,受9級特大地震影響燥爷,放射性物質(zhì)發(fā)生泄漏蜈亩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一前翎、第九天 我趴在偏房一處隱蔽的房頂上張望稚配。 院中可真熱鬧,春花似錦港华、人聲如沸道川。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冒萄。三九已至,卻和暖如春橙数,著一層夾襖步出監(jiān)牢的瞬間尊流,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工灯帮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留崖技,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓钟哥,卻偏偏與公主長得像迎献,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子腻贰,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

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