webpack常見面試問題整理

1.webpack是什么?

webpack一個用于現代javascript應用程序的靜態模塊打包工具

2.webpack的配置有哪些?

入口(entry),出口(output),mode,plugin,loader;

入口:指示webpack使用哪個模塊作為構建其內部依賴圖的開始。默認值是:‘./src/index.js’。

出口:告訴webpack在哪里輸出它所創建的bundle,以及如何命名這些文件,主要輸出文件的默認值是‘./dist/main.js’。

mode:提供 mode 配置選項,告知 webpack 使用相應模式的內置優化,development(開發環境),production(生產環境),none(不使用任何默認優化選項)。

loader:這是 webpack 開箱可用的自帶能力,loader 用于轉換某些類型的模塊(編譯兼容)。

plugin:打包優化,資源管理,注入環境變量等(能力擴展)。

3.webpack的作用?

模塊打包,編譯兼容,能力擴展

模塊打包。可以將不同模塊的文件打包整合在一起,并且保證它們之間的引用正確,執行有序。利用打包我們就可以在開發的時候根據我們自己的業務自由劃分文件模塊,保證項目結構的清晰和可讀性。

編譯兼容。通過webpack的Loader機制,不僅僅可以幫助我們對代碼做polyfill,還可以編譯轉換諸如.less, .vue, .jsx這類在瀏覽器無法識別的格式文件,讓我們在開發的時候可以使用新特性和新語法做開發,提高開發效率。

能力擴展。通過webpack的Plugin機制,我們在實現模塊化打包和編譯兼容的基礎上,可以進一步實現諸如按需加載,代碼壓縮等一系列功能,幫助我們進一步提高自動化程度,工程效率以及打包輸出的質量。

4.模塊打包的運行原理?

1、讀取webpack的配置參數;
2、啟動webpack,創建Compiler對象并開始解析項目;
3、從入口文件(entry)開始解析,并且找到其導入的依賴模塊,遞歸遍歷分析,形成依賴關系樹;
4、對不同文件類型的依賴模塊文件使用對應的Loader進行編譯,最終轉為Javascript文件;
5、整個過程中webpack會通過發布訂閱模式,向外拋出一些hooks,而webpack的插件即可通過監聽這些關鍵的事件節點,執行插件任務進而達到干預輸出結果的目的。

5.sourceMap的原理?

提到sourceMap,很多小伙伴可能會立刻想到Webpack配置里邊的devtool參數,以及對應的eval,eval-cheap-source-map等等可選值以及它們的含義。除了知道不同參數之間的區別以及性能上的差異外,我們也可以一起了解一下sourceMap的實現方式。
sourceMap是一項將編譯、打包、壓縮后的代碼映射回源代碼的技術,由于打包壓縮后的代碼并沒有閱讀性可言,一旦在開發中報錯或者遇到問題,直接在混淆代碼中debug問題會帶來非常糟糕的體驗,sourceMap可以幫助我們快速定位到源代碼的位置,提高我們的開發效率。sourceMap其實并不是Webpack特有的功能,而是Webpack支持sourceMap,像JQuery也支持souceMap。

6.有哪些常用的loader?

raw-loader:加載文件原始內容(utf-8)
file-loader:把文件輸出到一個文件夾中,在代碼中通過相對 URL 去引用輸出的文件 (處理圖片和字體)
url-loader:與 file-loader 類似,區別是用戶可以設置一個閾值,大于閾值會交給 file-loader 處理,小于閾值時返回文件 base64 形式編碼 (處理圖片和字體)
source-map-loader:加載額外的 Source Map 文件,以方便斷點調試
svg-inline-loader:將壓縮后的 SVG 內容注入代碼中
image-loader:加載并且壓縮圖片文件
json-loader 加載 JSON 文件(默認包含)
handlebars-loader: 將 Handlebars 模版編譯成函數并返回
babel-loader:把 ES6 轉換成 ES5
ts-loader: 將 TypeScript 轉換成 JavaScript
awesome-typescript-loader:將 TypeScript 轉換成 JavaScript,性能優于 ts-loader
sass-loader:將SCSS/SASS代碼轉換成CSS
css-loader:加載 CSS,支持模塊化、壓縮、文件導入等特性
style-loader:把 CSS 代碼注入到 JavaScript 中,通過 DOM 操作去加載 CSS
postcss-loader:擴展 CSS 語法,使用下一代 CSS,可以配合 autoprefixer 插件自動補齊 CSS3 前綴
eslint-loader:通過 ESLint 檢查 JavaScript 代碼
tslint-loader:通過 TSLint檢查 TypeScript 代碼
mocha-loader:加載 Mocha 測試用例的代碼
coverjs-loader:計算測試的覆蓋率
vue-loader:加載 Vue.js 單文件組件
i18n-loader: 國際化
cache-loader: 可以在一些性能開銷較大的 Loader 之前添加,目的是將結果緩存到磁盤里.

7.有哪些常見的plugin?

define-plugin:定義環境變量 (Webpack4 之后指定 mode 會自動配置)
ignore-plugin:忽略部分文件
html-webpack-plugin:簡化 HTML 文件創建 (依賴于 html-loader)
web-webpack-plugin:可方便地為單頁應用輸出 HTML,比 html-webpack-plugin 好用
terser-webpack-plugin: 支持壓縮 ES6
webpack-parallel-uglify-plugin: 多進程執行代碼壓縮,提升構建速度
mini-css-extract-plugin: 分離樣式文件,CSS 提取為獨立文件,支持按需加載 (替代extract-text-webpack-plugin)
serviceworker-webpack-plugin:為網頁應用增加離線緩存功能
clean-webpack-plugin: 目錄清理
ModuleConcatenationPlugin: 開啟 Scope Hoisting
speed-measure-webpack-plugin: 可以看到每個 Loader 和 Plugin 執行耗時
webpack-bundle-analyzer: 可視化 Webpack 輸出文件的體積 (業務組件、依賴第三方模塊)

參考文章:https://juejin.cn/post/6844904094281236487#heading-0

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372

推薦閱讀更多精彩內容

  • Vuejs部分 1.vue優點? 答:輕量級框架:只關注視圖層,是一個構建數據的視圖集合,大小只有幾十kb; 簡單...
    NaN2019閱讀 1,043評論 0 0
  • css的重繪與回流 重繪:當節點需要更改外觀而不會影響布局。 回流:DOM結構的修改引發DOM幾何尺寸變化的時候,...
    _claus閱讀 65,074評論 2 58
  • 隨著現代前端開發的復雜度和規模越來越龐大,已經不能拋開工程化來獨立開發了,如react的jsx代碼必須編譯后才能在...
    coderfl閱讀 261評論 0 0
  • 0 HTML5相關 websocket WebSocket 使用ws或wss協議,Websocket是一個持久化的...
    可愛多小姐閱讀 892評論 0 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,577評論 28 53