前端工程化解決方案
在大前端的趨勢下,傳統(tǒng)的前端開發(fā)模式已經(jīng)不能很好地承載實際的項目需求。因此,我們需要一系列解決方案來使項目變得規(guī)范、可配置、易于優(yōu)化等。
本文將針對這個問題進行簡單分析,講解前端工程化的概念、落地實踐,并給出一系列解決方案。
一、什么是前端工程化本篇文章是本人在 2020年時推進公司內(nèi)部前端工程化所寫,在原文的基礎(chǔ)上對詳細細節(jié)、業(yè)務(wù)場景以及緣由進行了縮減,對于不了解前端工程化的前端開發(fā)可進行閱讀,從而達到了解工程化的目的,更加詳細的內(nèi)容需要自行查閱資料并學(xué)習(xí)。
前端工程化是將軟件工程相關(guān)的方法和思想應(yīng)用到前端開發(fā)中,從而提升前端開發(fā)效率、提高產(chǎn)品質(zhì)量、降低開發(fā)難度、減少公司成本的方法和工具。
前端工程化貫穿整個前端項目各個階段,包括代碼規(guī)范、流程規(guī)范、分支管理、程序開發(fā)、前后端聯(lián)調(diào)、自動化測試、應(yīng)用構(gòu)建、系統(tǒng)部署和監(jiān)控、運維等。
二、為什么要使用前端工程化隨著近些年來前端技術(shù)的不斷發(fā)展,越來越多復(fù)雜的業(yè)務(wù)放在了前端,前端不再是簡單的 HTML + CSS + JavaScript 組合。
業(yè)務(wù)的復(fù)雜性導(dǎo)致前端代碼量增加,因此前端代碼的可靠性、可維護性、可拓展性以及前端應(yīng)用的性能和開發(fā)效率成為重要問題。前端工程化應(yīng)運而生,旨在解決這些問題。
前端工程化的優(yōu)勢包括:
- 提高團隊合作效率和降低溝通成本。
- 實現(xiàn)更好的協(xié)同,減少開發(fā)和測試人員的重復(fù)勞動。
- 提高代碼質(zhì)量和可維護性,降低發(fā)布的常見問題。
前后端分離開發(fā) 為前端工程化的發(fā)展提供了土壤。隨著市場需求的不斷變化,前端開發(fā)已從傳統(tǒng)的 Webpage 模式轉(zhuǎn)變?yōu)?WebApp 模式,不斷推動著前端工程師的工作內(nèi)容變化。為應(yīng)對這些變化,公司技術(shù)部門應(yīng)設(shè)計出前端開發(fā)的方法論。
前端工程化的主要目標(biāo)是解放生產(chǎn)力、提高生產(chǎn)效率。通過制定一系列規(guī)范,借助工具和框架解決前端開發(fā)以及前后端協(xié)作過程中的痛點和難度問題。
四、如何實施前端工程化實施前端工程化的第一步是明確前后端開發(fā)的分工,為實現(xiàn)前后端分離打下基礎(chǔ)。
前端主要負(fù)責(zé)以下內(nèi)容:
- 靜態(tài)資源和動態(tài)資源的處理
- JavaScript實現(xiàn)前端業(yè)務(wù)邏輯
- HTML模板文件的產(chǎn)出
- 中間層Web服務(wù),一般由Node.js實現(xiàn)
- 前端單元測試
- 前端項目部署
其中,靜態(tài)資源包括 js 文件、css 文件以及各種格式的圖片、媒體文件等,這些文件不依賴于服務(wù)器,只需要在瀏覽器里解析;動態(tài)資源是指 HTML 的模板,如果項目不是由服務(wù)器完成渲染的SPA(單頁面)應(yīng)用,就要考慮如何實現(xiàn) HTML 模板的渲染。前端項目部署是指靜態(tài)資源文件在測試服務(wù)器上的部署,以及 HTML 模板文件在 Node.js中間層服務(wù)器上的部署。
五、解決方案規(guī)范化約束
規(guī)范化約束對于服務(wù)器端開發(fā)和前端工程化開發(fā)都至關(guān)重要。規(guī)范化約束可提高團隊合作、降低維護成本、有助于代碼審查。主要包括文檔規(guī)范、工具規(guī)范、質(zhì)量規(guī)范、代碼規(guī)范、UI規(guī)范、項目結(jié)構(gòu)規(guī)范、git commit規(guī)范等。
項目構(gòu)建
項目構(gòu)建將前端開發(fā)中的所有源代碼轉(zhuǎn)化為宿主瀏覽器可以執(zhí)行的代碼。需要完成編譯的內(nèi)容包括無法被瀏覽器直接識別的JS代碼、無法被瀏覽器直接識別的CSS代碼、無法被瀏覽器識別的HTML模板代碼等。構(gòu)建工具可實現(xiàn)依賴打包、資源嵌入、文件壓縮、加入hash指紋等優(yōu)化,以提升前端應(yīng)用性能。
JavaScript編譯
Babel的作用是將瀏覽器未實現(xiàn)的ECMAScript規(guī)范語法轉(zhuǎn)化為可運行的低版本語法。這樣,前端工程師可以更自由地使用新的 ECMAScript 規(guī)范而不擔(dān)心兼容性問題。
CSS預(yù)編譯
CSS預(yù)編譯器提供便捷的語法和特性供開發(fā)者編寫源代碼,然后通過編譯工具將源碼轉(zhuǎn)化為CSS語法。這樣,可以在開發(fā)過程中使用更高效、模塊化的CSS編程方式。
模塊化開發(fā)
模塊化開發(fā)解決了命名沖突、依賴管理、性能優(yōu)化、可維護性和代碼復(fù)用性等問題。ES6 Module規(guī)范逐漸取代了傳統(tǒng)的模塊化規(guī)范,通過構(gòu)建工具實現(xiàn)ES6 Module規(guī)范的編譯。
組件化開發(fā)
組件化開發(fā)是從設(shè)計層面上對UI進行拆分。將UI拆分為組件,每個組件包含了HTML模板、CSS樣式和JS邏輯。通過組件化開發(fā),可以實現(xiàn)代碼的復(fù)用和模塊化,提高代碼的可維護性和可擴展性。頁面上的每個元素都被看作是一個組件,頁面本身也是一個大型組件,由多個中小型組件組成,這種拆分和組裝的方式符合前端開發(fā)的"分治思想"。
開發(fā)環(huán)境與Mock服務(wù)
為了提高開發(fā)效率,可以結(jié)合本地服務(wù)器和構(gòu)建工具實現(xiàn)前端代碼的動態(tài)構(gòu)建。本地服務(wù)器可以監(jiān)聽源碼的修改,一旦有修改就觸發(fā)動態(tài)構(gòu)建,省去手動構(gòu)建的步驟,提高開發(fā)效率。此外,Mock服務(wù)可以模擬后端接口,輔助前端邏輯編寫和功能模塊的開發(fā)。前端工程師可以先使用Mock數(shù)據(jù)進行開發(fā),待后端接口開發(fā)完成后再切換到真實接口,實現(xiàn)前后端的并行開發(fā)。
項目部署流程化
項目部署是將前端構(gòu)建產(chǎn)出的代碼包部署到測試服務(wù)器的過程。部署流程應(yīng)該簡單、清晰,并且可配置??紤]到團隊協(xié)作和安全因素,最佳實踐是搭建一個可供嚴(yán)格審查、隊列控制、操作簡化的部署平臺,并由專人負(fù)責(zé)流程進度。
前端工程化落地支撐
在實施前端工程化時,可以選擇合適的前端語言、框架,例如LESS/SASS/Stylus等的CSS預(yù)編譯方案,以及AMD/CommonJS/ES6 Module等的JS模塊化方案。同時,前端UI框架(如Layui、Bootstrap、Element UI等)和MV*框架(如Vue、React、Angular等)都可以根據(jù)項目需求進行選用。
優(yōu)化
在前端開發(fā)過程中,優(yōu)化是一個重要的方面。代碼優(yōu)化包括按需加載、延遲加載、復(fù)用代碼、避免全局變量、使用事件委托、壓縮資源、使用自動補全工具等。非代碼優(yōu)化包括減少HTTP請求次數(shù)、使用CDN、使用緩存等措施,都可以提升前端應(yīng)用的性能和用戶體驗。
前端測試
測試是前端工程化建設(shè)中不可或缺的一環(huán)。通過單元測試和集成測試,可以及早發(fā)現(xiàn)和解決bug,降低開發(fā)成本。自動化測試工具可用于單元測試和集成測試,例如Karma + Mocha + Chai等。
構(gòu)建、部署
借助Node和Webpack等工具,可以實現(xiàn)前端代碼的自動化構(gòu)建。自動化構(gòu)建可以包含代碼檢查、單元測試、語言編譯、依賴分析、打包、壓縮、替換等步驟,提高開發(fā)效率。自動化部署可以通過Jenkins、Docker等工具實現(xiàn)。
性能和錯誤監(jiān)控
監(jiān)控是前端工程化建設(shè)的最后一環(huán),通過監(jiān)控系統(tǒng)可以了解項目在生產(chǎn)環(huán)境中的運行情況,開發(fā)團隊可以根據(jù)監(jiān)控報告對項目進行調(diào)整和優(yōu)化。
結(jié)語前端工程化是前端開發(fā)的趨勢,它可以提高開發(fā)效率、降低成本、提高代碼質(zhì)量。然而,在實施前端工程化時需要根據(jù)項目實際情況進行定制化選型,合理選擇工具和框架。優(yōu)化和測試是工程化中不可忽視的部分,它們對于提升應(yīng)用性能和穩(wěn)定性至關(guān)重要。
