天天看點

Umi3最佳實踐-Umits腳手架【已開源】

前言

Umi作為企業級前端應用架構,其可擴充,開箱即用的特性,可以大大提供前端的開發效率
【實際項目中】我發現還有很多可以優化的地方,于是基于umi3封裝了腳手架umits

閱讀文章之前建議先下載下傳項目跑起來項目位址,點我!!!

Umits【5分鐘】搭建大型項目

Umits基于umi3和umicli,已經做了編譯打包優化,建構優化,規範內建,工具內建,demo展示
使用者能夠快速介入開發,且隻需要關注業務開發,提高人效,同時代碼規範的內建一定程度保證了代碼品質
Umi3最佳實踐-Umits腳手架【已開源】

前端lint規範可以一定程度保證代碼品質,但是還有一些無法覆寫的,建議大家參考:

前端大型項目系列(一) - 前端代碼規範

umits使用

腳手架方式

Umits架構

Umi3最佳實踐-Umits腳手架【已開源】

Umits優化效果

描述

優化前

優化後

項目狀态

效果

體積

793kb

236kb

項目引用了lodash

減小70%

如何做到?

59kb

4.99KB(gzip)

用dayjs替換moment,同時解決moment國際化語言包大體積問題

至于線上沒有sourceMap會影響bug排查問題解決辦法:接入前端監控Sentry,Sentry支援單獨上傳SourceMap定位bug

Sentry文檔

Umits源碼

注釋檔案

1066ms

400ms

提速60%

恢複注釋

2500ms

1550ms

提速40%

umirc.ts

umirc.test.ts

umirc.pre.ts

umirc.pro.ts

針對不同環境,側重點不一樣,本地需要增量編譯速度更快,線上側重穩定和縮小打包體積

4套環境配置,請看項目源碼Umits項目源碼【已開源】歡迎一起完善

連結:(github.com/Master-H/um…)

Umi3最佳實踐-Umits腳手架【已開源】
Umi3最佳實踐-Umits腳手架【已開源】

工具函數封裝

封裝前

封裝後get、post、put、delte統一使用方式

入參都是(url,object)形式,使用方式統一友善,并且封裝好了接口報錯,實作快速定位,無需單獨處理

Umi3最佳實踐-Umits腳手架【已開源】

cancel函數,實作請求取消

取消效果如下

Umi3最佳實踐-Umits腳手架【已開源】

withCancelHoc,取消請求高階元件

上面代碼實作了,元件解除安裝預設取消目前頁面的請求,在某些場景有必要的,比如兩個Tab頁面,完全一樣,僅僅入參不一樣,就有可能因為因為網絡問題,導緻資料錯亂

TabA頁面:請求資料get1,資料還沒回回填,切換到TabB
TaB頁面:請求資料get2,由于網絡問題,get2先到回填資料,過了一會兒get1資料回填覆寫get2,就會導緻顯示出錯

代碼規範校驗

git cz、 Eslint、stylelint強制校驗,不符合要求,禁止送出
Umi3最佳實踐-Umits腳手架【已開源】

Umits産生背景

公司現狀

公司内部已經有5個大型項目基于umi開發且穩定運作,但沒有沉澱出一套基于實戰優化的腳手架
我思考一個問題,也問了其他人,從新搭建一個基于Umi項目,需要怎麼做,需要多久?

搭建新項目兩種做法:

第一種

第二種

存在痛點

針對上面痛點umits腳手架就誕生了,同時配合前端大型項目系列(一) - 前端代碼規範,5分鐘即可搭建高品質可維護的大型項目

demo教程

常用的:菜單配置化、工具函數,異步加載,高階元件都有demo案列,友善快速上手
Umi3最佳實踐-Umits腳手架【已開源】

總結

umits開發,并沒有涉及多複雜高深的技術,大部分都是基于經驗和總結,沉澱出的一個可以快速搭建高品質,友善上手的項目 所在一開始我也在猶豫,到底要不要做寫這個腳手架
但是後來思考一下:通過這個腳手架,我們可以将原來不複雜的事情變得更簡單,而且可以大大提升開發效率,項目品質,那麼Just do It !

項目umits已經開源

如果本文對你有用,點贊支援一下,不足的地方輕拍,歡迎一起進步!

最後預告一下,從0到1開發umi插件,已經在路上了