楊毅臻,微醫前端技術部平臺支撐組,全宇宙最 Open 的前端團隊~css
此文做爲這個系列的目錄,會一直更新。前端
標題 | 模塊 | 內容 |
---|---|---|
你怎麼能夠不瞭解 AST 呢? | 公共 | 原理分析 |
90 行代碼的webpack,你肯定不學嗎? | webpack | 簡易實現 |
萬字長文:關於sourcemap,這篇文章就夠了 | webpack | 原理分析 |
【Webpack】devServer 實驗報告 | webpack | 原理分析 |
120 行代碼幫你瞭解 Webpack 下的 HMR 機制 | webpack | 原理分析 |
寶啊~談談Tapable | webpack | 原理分析 |
Webpack - 手把手教你寫一個 loader / plugin | webpack | 簡易實現 |
Webpack 實現 Tree shaking 的前世此生 | webpack | 原理分析 |
Webpack」從0到1學會 code splitting | webpack | 原理分析 |
webpack 最佳實踐 | webpack | 簡易實現 |
Module Federation你的浪漫我來懂 | webpack | 原理分析 |
十分鐘瞭解vite如何支持react | vite | 原理分析 |
站在潮流前沿,快速實現一個簡易版 vite | vite | 簡易實現 |
10 分鐘搞懂 Vite devServer,速來圍觀! | vite | 原理分析 |
【vite】你不知道的小妙招,肯定不看一下嗎? | vite | 原理分析 |
Vue 2 系統如何快速遷移 Vite 做爲開發工具 | vite | 簡易實現 |
無用代碼去哪了?項目減重之 rollup 的 Tree-shaking | rollup | 原理分析 |
rollup - 構建原理及簡易實現 | rollup | 簡易實現 |
微醫是國際領先的智能化數字健康平臺,總部位於杭州。微醫以「健康有道,就醫不難」爲使命,十年來始終致力於經過創新和科技推進中國醫療健康產業數字化、智能化,爲全社會提供優質、高效、可及的醫療健康服務,守護億萬人健康。vue
微醫前端技術部目前 90+個前端小夥伴,負責微醫集團全端、全棧、全場景的產品研發工做,主要技術棧 Vue(SSR)、React(RN)、Node(BFF),崇尚工程師文化,探索技術極限,致力於用代碼讓全民醫療健康做出美好改變!node
貼幾個面試題react
拋開咱們的平常開發,這塊的細節平時使用頻率較低,所以若是不通過系統學習很是容易觸及知識盲區~jquery
相信很多人以前就有嘗試學習過 webpack,但老是學了就忘(官網文檔確實挺多的),要系統掌握費時費力還不容易記住。webpack
同時做者寫這個系列容易爛尾,由於要花很大時間研究和學習;但它特別適合咱們集體進行研究、輸出。web
包含了面試
不管是流程仍是提效,這都是團隊繞不開的技術能力儲備。vue-cli
ps.多人協做、按模塊分工,因業務增加致使排期不一致,因此文章可能不會按照順序產出,可是每一篇都是獨立的且不影響閱讀體驗,也能夠先收藏等養肥了再從頭開始看。
整個專欄會以webpack五、vite、rollup爲核心展開,從框架基本原理分析到本身實現最後是一些我司的最佳實踐及架構級別的探索。
針對不一樣階段的同窗都可以收穫
這裏列舉的是 node 尚未普及起來, 當時前端的做用大都是動效切圖仔。
稍微複雜一點的場景,會將咱們的業務代碼(js、css)使用代碼壓縮工具(這個網上就有在線版)進行手動壓縮、混淆相似於 jquery.min.js 這樣的版本, 最後會放到 CDN,這個時候只有手動整合打包產物。
咱們經過當即調用的函數表達式(IIFE)來實現最初的模塊化概念,避免污染全局執行環境去使用一些第三方模塊方式,可是他們之間的依賴順序和衝突依舊存在。
此時有了代碼脫敏和減小體積的概念,然而咱們仍是有大量人工整理工做,所以咱們須要易用性;有了模塊化的概念卻依舊須要更細粒度的解耦。
瀏覽器無法使用 commonjs,使得代替他的倆種模塊化規範 —— require.js(AMD)和 Sea.js(CMD)大放異彩。使用這倆個方案能夠幫助咱們有效的拆分代碼,組織代碼,在原來粗暴的模塊化方式上又進了一步,誕生了依賴與結構的概念。
這是影響 bundle 格局很是重要的痛點。
node 的普及與成熟,讓構建更近了一步。
此時先後端分離的概念已經逐漸清晰起來,前端開始脫離服務端代碼或是 framemaker,本身進行項目維護和 package。
nodejs 的誕生伴隨着 npm 和 commonjs 的到來,上個時代的"模塊化"被自然的支持起來,有了模塊化的概念各類第三方庫便如雨後春筍般冒尖了。
import/export 則是 ES6 提出的 Esm 模塊化規範,隨着 ES6 的覆蓋,AMD 和 CMD 的戰役終於結束了,同時也加速了 bundle 的額外功能,編譯(babel)。
在線編譯時間太長了,影響體驗,可否把編譯時間存留在打包前置階段呢?
webpack、grunt、glup 等,誕生核心都是模塊打包器,經過一系列可操做的配置對文件進行預編譯與整合。
這些打包工具在配置上各有千秋,grunt 自動化執行任務、webpack 偏按照能力進行配置、glup 偏工做流式鏈式調用。
使用姿式各有千秋,配套生態跟不上纔是關鍵因素。
webapck 以強大的 code splitting 和配置化的低門檻佔領高地。
此時 bundle 只負責輸出最終產物,隨着業務的複雜度,不能每次本身打包部署在不一樣環境吧?多場景多環境須要更多能力知足咱們的開發效率。
簡單說就是工程化,同時對於體驗、兼容性、性能、多環境等更高層次的追求須要打包工具去逐步升級。
結合 npm 的生態圈,這些都不成問題,因此當時也有人笑稱配置工程師。
webpack 從一個模塊打包器開始蛻變,由於其開放性設計,被許多工具做爲底層進行二次封裝。
vue、react 的興起與之配套的自動化工具逐漸進入視野,更加的易用,把更多的配置默認收斂到工具內部,減小心智負擔。
覆蓋從源碼到構建產物的每一個生命週期,支持各類功能擴展和業務需求(截至 umi)。
站擼 ES6,hooks 式的配置更輕,TreeShaking 的效果更好,我司當前開發 sdk 和工具庫都是使用它快速出活。
終端將前端拉近用戶,它的進步決定前端的進步,瀏覽器端已經支持了 ESM (script 的 type 屬性設置爲 module), 咱們能夠更愉快的直出了(區別於中出)。 直出意味着什麼?最大程度的作到了按需加載,以及取消編譯 ES6!
然而由於兼容性的問題,咱們仍是不能在產線直接使用 ESM(看具體業務場景),最終仍是須要打包(vite在生產環境也是這麼作的使用了rollup),相信在將來這個問題會獲得改善(http二、終端的迭代進步)。
咱們的部分項目也已經開始使用 vite,絲滑的啓動和熱更新速度讓人拍案叫絕。
webpack5 出了殺招,以模塊共享爲切入點從新弱化了編譯問題,提早編譯並使用相似於 DLL 的方式在項目中引入並執行。與其說是提高了打包速度倒不如說是採用了"雲"代碼的概念,屬於跨應用的抽離,在業務複用、微前端等場景留有很大的想象空間。
總結一下貫穿前端發展飛速的這 10 年,演進的核心因素:
爲何開篇介紹了構建的歷史演進,就是但願你們可以看到隨着整個前端技術的發展,咱們所遇到的問題以及各個優秀的解決方案對咱們技術起到翻天覆地的影響。
拋一個小問題,你如今在使用的構建工具是什麼,遇到過什麼問題,歡迎在評論區討論
立馬收藏咱們看整個系列專欄吧 ~
看完別忘記對我素質四連,點贊、關注、轉發、評論