jsliang 求職系列 - 36 - 前端工程化系列總結

一 目錄

不折騰的前端,和鹹魚有什麼區別javascript

目錄
一 目錄
二 複習知識點
2.1 Babel
2.2 Webpack
2.3 Webpack - Tree Shaking
2.4 Webpack - Scope Hoisting
2.5 Webpack 簡單實現
2.6 Webpack 性能優化
三 參考文獻
3.1 雜
3.2 Babel
3.3 模板引擎
3.4 前端監控
四 Webpack 參考文獻
4.1 Webpack 系列文章
4.2 Webpack 性能優化
4.3 Scope Hoisting
4.4 Tree Shaking
4.5 懶加載

二 複習知識點

返回目錄

本系列參考 79 篇文章,總結出 6 篇文章,感謝小夥伴們的支持。html

2.1 Babel

返回目錄

文章地址:Babel前端

  • [x] AST:抽象語法樹,是源代碼語法結構的一種抽象表示
  • [x] 原理:將現有的 ES6+ 代碼,先經過 詞法分析語法分析 以後 解析AST,而後將這份 AST 轉換 爲咱們須要形式的 AST,最後將這個 AST 再轉換成 ES5 或者指望格式的內容。

2.2 Webpack

返回目錄

文章地址:Webpackvue

  • [x] 是什麼:本質是一個模塊打包器,其工做是將每一個模塊打包成相應的 bundle
  • [x] 核心概念modeentryoutputloaderplugin
  • [x] 構建流程:初始化、編譯、輸出,插件(Plugin)隨時監聽 Webpack 廣播並在某些時候調用 API 改變運行結果。
  • [x] entry:指定打包⼊口⽂文件。本來是 string,即一個入口對一個打包文件、object 多對一,array 多對多
  • [x] output:打包後的文件位置
  • [x] loader:翻譯官,對不一樣資源進行處理,從右向左執行
  • [x] plugin:插件,擴展 Webpack 的功能,監聽 Webpack 的生命週期,調用 API 改變輸出結果。
  • [x] resolve:配置 Webpack 如何尋找模塊所對應的文件。resolve.modules/extensions/include/exclude
  • [x] 從 0 開始配置 Webpackjava

    • [x] 技術選型:移動端|PC、MPA|SPA、HTML|模板引擎、CSS|預處理器、ES5|ES6+、Mock、React|Vue、多人合做|單人項目、ESlint|TSlint、單元測試、提交規範
    • [x] Loader 處理 CSS、Less、Sass
    • [x] Loader 處理圖片
    • [x] Loader 處理字體
    • [x] Loader 配置多頁面打包(MPA)
    • [x] source map
    • [x] webpack dev server
    • [x] babel
    • [x] react
    • [x] 性能優化
    • [x] 其餘:解析器、寫 Loader、寫 Plugin
  • [x] 懶加載node

    • [x] 代碼分割code splitting
    • [x] 實現原理:子模塊單獨打包、藉助函數延遲加載
    • [x] Vue 按需加載
  • [x] 熱更新react

    • [x] 開啓方式:配置 devServer,添加熱更新插件 HotModuleReplacementPlugin
    • [x] 熱更新原理
  • [x] 3 種 hashwebpack

    • [x] hash:整個項目只要有文件更改,那就變動
    • [x] chunkhash:某個入口對應的 chunk 進行了變動,那就生成新的 hash 值,不會影響其餘 chunk
    • [x] contenthash:對應某個文件內容變動了,纔會更換這個文件,生成新的 hash,而不會影響同一個模塊下其餘文件
  • [x] source map:將編譯、打包、壓縮後的代碼映射回源代碼的過程

2.3 Webpack - Tree Shaking

返回目錄

文章地址:Webpack - Tree Shakinggit

  • [x] Tree Shaking:經過在 package.json 中開啓 sideEffects,將 ES6 模板語法的 import 行爲導入的文件都標記爲無反作用,而後開啓 -p 的生產模式,讓 Webpack 調用內部的 UglifyJSWebpackPlugin 來進行刪除未引用代碼。
  • [x] dead-code:代碼不會被執行,或者執行結果不會被用到,或者代碼只會影響死變量的,叫作 dead-code
  • [x] 反作用:若是在 import 導入時就會作一些特殊行爲的代碼,稱之爲有反作用的代碼,例如 polyfill 會影響全局做用域
  • [x] 靜態分析:ES6 模板語法能夠在不執行代碼的狀況下,從字面量上對代碼進行分析。靜態分析是 Tree Shaking 的基礎。而 require 是須要執行了才知道引用內容的,就不能經過靜態分析作優化

2.4 Webpack - Scope Hoisting

返回目錄

文章地址:Webpack - Scope Hoistinges6

  • [x] Scope Hoisting:Webpack3 添加的功能,做用域提高。原理是分析模塊的引用關係,將打散的模塊合併到同一個函數中,須要 ES6 模板語法進行靜態分析

2.5 Webpack 簡單實現

返回目錄

文章地址:Webpack 簡單實現

  • [x] 利用 babel 完成代碼轉換,並生成單個文件的依賴
  • [x] 生成依賴圖譜
  • [x] 生成最後打包代碼

2.6 Webpack 性能優化

返回目錄

文章地址:Webpack 性能優化

  • [x] resolve.modules:用於配置 Webpack 去哪些目錄下尋找第三方模塊(node_modules
  • [x] resolve.extensions:在導入沒帶文件後綴的路徑時,Webpack 會自動帶上後綴去嘗試詢問文件是否存在,而 resolve.extensions 用於配置嘗試後綴列表;默認爲 extensions:['js', 'json']
  • [x] resolve.include/exclude:以 babel-loader 爲例,能夠經過 includeexclude 幫助咱們避免 node_modules 這類龐大文件夾]
  • [x] 緩存cache-loaderuglifyjs-webpack-plugin,將編譯結果寫進硬盤緩存,下次文件若是沒有變化則直接拉取緩存
  • [x] 多進程Happypackthread-loader,將任務分解成多個子進程去併發執行,提升打包效率
  • [x] 多進程壓縮Webpack 自帶的 UglifyJSWebpackPlugin 壓縮插件是單線程運行的,而 TerserWebpackPlugin 能夠並行執行(多線程)
  • [x] 靜態資源分離CommonsChunkPlugins 每次構建都會從新構建 vendor,出於效率問題使用 DllPlugin 能夠將第三方庫單獨打包到一個文件中,只有依賴自身發生版本變化纔會從新打包
  • [x] 打包資源壓縮

    • [x] JS 壓縮:UglifyJSWebpackPluginTerserWebpackPlugin
    • [x] HTML 壓縮:HtmlWebpackPlugin
    • [x] CSS 壓縮:MiniCssExtractPlugin
    • [x] 圖片壓縮:ImageWebpackPlugin
    • [x] Gzip 壓縮:不包括圖片
  • [x] Tree Shaking
  • [x] Scope Hoisiting
  • [x] 按需加載

三 參考文獻

返回目錄

本系列參考文獻有 79 篇.

3.1 雜

返回目錄

2020

2019

2018

3.2 Babel

返回目錄

3.3 模板引擎

返回目錄

3.4 前端監控

返回目錄

四 Webpack 參考文獻

返回目錄

Webpack 系列參考文獻有 52 篇文章。

4.1 Webpack 系列文章

返回目錄

其餘

2020 年文章

2019 年文章

2018 年文章

2017 文章

4.2 Webpack 性能優化

返回目錄

2019 年文章

2018 年文章

2017 年文章

4.3 Scope Hoisting

返回目錄

4.4 Tree Shaking

返回目錄

4.5 懶加載

返回目錄

jsliang 的文檔庫由 梁峻榮 採用 知識共享 署名-非商業性使用-相同方式共享 4.0 國際 許可協議 進行許可。<br/>基於 https://github.com/LiangJunrong/document-library 上的做品創做。<br/>本許可協議受權以外的使用權限能夠從 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 處得到。
相關文章
相關標籤/搜索