前端早早聊大會,與掘金聯合舉辦。加 codingdreamer 進大會技術羣,贏在新的起跑線。css
第二十八屆|前端 WebGL 專場,2021 年要不要押寶 WebGL 彎道超車,6-26 全天直播,9 位講師(阿里雲/螞蟻/美團/小米等),報名上車👉 ):html
全部往期都有全程錄播,上手年票一次性解鎖所有前端
本文是第十六屆 - 前端早早聊組件化專場,也是早早聊第 114 場,來自 阿里巴巴 - 遊鹿 的分享。web
你們好,我是遊鹿,我來自阿里巴巴業務平臺事業-體驗技術-Fusion 中後臺,如今是 Fusion 組件體系的負責人。自 18 年加入阿里巴巴開始,一直專一於中後臺領域的設計師-前端工做協同,主要是前端研發效能的提高。聚焦組件的 DPl 設計、無障礙化、國際化、跨端研發等等。npm
今天我會主要從三個方面進行分享,分別是:前端提效發展史、前端標準規範、物料管理服務化。後端
今天的主題是「如何借服務化的系統管理團隊的組件資產」,在聊「如何」以前,咱們先看一下阿里是怎麼走這條路的。數組
總結一下阿里這麼多年中後臺的發展,我我的把他們分爲 4 點:統一的技術棧、統一技術組件、物料的推廣、物料的共享:瀏覽器
咱們重點從統一基礎組件庫開始說,先看爲何要統一。其實爲了不重複造輪子,節省業務精力。對業務自己而言,花費大量的時間來構建底層基礎設施並非一件好事,並且前端領域的底層基礎設施都大同小異,不一樣團隊重複構建形成了極大的資源浪費。安全
咱們在這一點上主要看下,阿里是如何作到「使用一套庫就能夠解決幾乎全部 BU 的需求的」。這裏主要介紹Fusion,它在初期的核心能力主要是功能 + 換膚,你能夠理解爲它提供了兩個包:markdown
也就是說每一個業務用的骨架是同樣,可是用的皮膚包是不一樣的,經過皮膚包 + 骨架組件的組合,用戶就能獲得一個適合當前 BU 的一套組件體系。咱們也提供了平臺化的服務,讓各個 BU 的設計師、開發者能夠直接在網站上進行個性化的組件配置,來生產符合業務訴求的皮膚包,配置化能力包括邊、角、線、顏色、陰影等基礎配置,包括各個組件的細節配置等。
這個是比較核心兩個點,固然除此以外還有其餘的能力,好比說一鍵生成對應的 Sketch 物料,供設計師直接使用等。
這個是一個 1.0 版本的架構圖,這套能力的最底層依賴於設計理論的抽象,基於設計方案,抽象出兩套骨架組件 —— PC 端和移動端,如今 PC 端是 React 技術棧,移動端是 Rax 技術棧,這套組件體系是整個 Fusion 的核心,咱們把它叫作骨架組件,再往上一層是主題配置服務,主要供設計師進行操做。
提供一個視頻供你們瞭解這個在線配置的過程。好比說顏色邊角、陰影、線條等等,這個是比較統一的設計,設計上都是規範化的設計,能夠配置這些公共的樣式以外,還能夠配一些組件的樣式。好比說我單獨對 Button 進行設計,把它的邊角從直角風格改爲圓角風格,在這個平臺上都是能夠作到的。剛纔提到說這套平臺的能力依賴底層設計抽象,也就是說它實際上是有限的,但這種有限在中後臺這個場景下其實徹底是夠用的。
按照視頻這麼一通操做下來,它最終會產出一個 npm 格式的主題包。這個包會記錄全部樣式信息,把這個主題包的樣式資源引入業務項目,再訪問頁面,能夠看到頁面樣式發生了變化,這個就是 Fusion 換膚核心能力的演示,也是 1 套組件庫,支撐阿里這麼多 BU 的基礎。
解釋一下原理,換膚能力用到的是 Sass(Sass、Less 都有這些能力)。Fusion 提供的「骨架組件」包括「JS 邏輯」部分,和「Sass 樣式體」部分,「定製化皮膚包」包括了「Sass 變量」 部分。咱們把「Sass 樣式體」和「Sass 變量」進行編譯,編譯出一份瀏覽器能夠解析訪問的樣式文件 CSS 文件,業務項目引入 JS、CSS 兩份文件,最終知足不一樣 BU 設計體系的訴求。
基本上在 4 年前,Fusion 就已經具有這個能力了,它不是一成不變的,咱們在這些的基礎上不斷推陳出新,持續迭代,陸續支持了一些其餘功能:
Fusion1.0 版本里的換膚能力是須要 Sass 配合的,而瀏覽器其實不識別 Sass 語法,因此才須要經過編譯生成 CSS 文件。而 CSS 變量徹底沒有這個顧慮,它就是瀏覽器識別的,就是 W3C 規範承認的語法。因此說咱們只須要把樣式部分換掉,從一份完整的 CSS 文件換成兩份 CSS 文件,一份是樣式體,一份是 CSS 變量的定義文件,便可。這一能夠知足在線配置的需求,同時 CSS 變量的效率更高,速度更快。
從題目能夠看出「Sass 體系升級爲支持 CSS 變量體系」,也就是說 Fusion 自己仍然須要 Sass 體系,CSS 變量體系並不能徹底取代 Sass(用戶能夠擺脫 Sass)。主要緣由是 Sass 的一些能力目前是 CSS 變量不具有的。
.next-button
這種類名它其實改變不了的,因此說在掌控範圍上,他是沒有辦法作到的,這是一個坑點。rgba()
方法,在 CSS 中,它認爲 rgba(#000, 0.5) 是不合法的,CSS 的特性就是不合法也不會報錯,最多就是不生效。而 Sass 能夠把它正確地識別爲透明度爲 0.5 的黑色。這也是他們的一個差異。calc()
有一些坑點介紹給你們:
calc()
的加減運算符先後要保留一個空格,不然是無效的,可是有一些地方很容易忽略,好比說 calc() 前不容許有負號,-calc(1px)
須要寫成 calc(0px - 1px)
;calc()
內如有具體值,需寫清楚單位例如 px
,不寫單位在大多數css屬性裏是不合法的(line-height除外)。這邊列舉一些有意思的小點跟你們分享,你們有興趣想了解更多細節知識點,能夠參考知乎文章,這裏有支持運行時 CSS 變量換膚的整個改造過程 《✨FusionNext 可配置能力從 Sass 體系升級爲支持 Css Variable》。
如今阿里內部保守估計的話,有 7000+ 個項目都在使用 Fusion,而後覆蓋了 300 多個團隊,這個只是比較保守的一個統計,實際上應該比這些要更多一些的。能夠看到上面圖中有 4 張圖,他們每一個團隊的風格實際上是不同的,可是用的其實都是一套庫,這也就是統一基礎組件。
前端提效發展史第三個是物料的託管,物料託管是什麼、爲何要有物料託管?對於業務來講,光有基礎組件是不夠的,每一個團隊都有一些業務屬性很強的組件,好比說金融團隊可能須要有貨幣匯率轉化的組件,這對於菜鳥的倉儲團隊來講是根本沒必要要的,因此說每一個團隊都會在統一的基礎組件的基礎上,再建設一套本身的業務組件庫,這是在小範圍內的提效方案,這一方案確定是對的。
但從集團層面上看,咱們能爲業務團隊作些什麼,可以讓他們更好的去維護這套組件呢?因此第三點物料託管這條路實際上是一個頂層基礎設施建設的擴展,咱們但願提供一些這樣的頂層的基礎服務,達到讓物料能夠健康迭代的目的。
這些都是屬於底層的技術能力建設,爲了不重複的人員投入,咱們在剛纔 Fusion 的架構基礎上,又增長了一套叫作物料託管的能力,以保證物料健康迭代、可查可用、類型全面等。
第 4 點是物料共享,這也是咱們如今正在走的路。當用戶已經用上了物料託管能力,他按照規定的格式,使用了統一的工具開發、發佈了物料,在公共的平臺上能看到找到物料,甚至還能按照團隊進行分類管理。當這些物料都在同一個平臺上以後,咱們其實能夠作更多的事情,好比說物料的共享,跨團隊的共享。
物料的共享不是指拿來就能用,舉個例子餓了麼商家團隊收到一個需求,要作商品的管理系統,可能要包含商品的上架,下架信息填寫等等。這些功能可能已經在淘寶、飛豬團隊都有過一份實現了,邏輯都是相似的,增刪改查。其實這個適合餓了麼的商家同窗徹底能夠站在前人的肩膀上,當他發現別的團隊已經作了這些功能的時候,他能夠把物料拿過來,調整細節,快速複用上線。
由於物料共享的前提實際上是中後臺領域的特色,就是說設計規範統一和前端邏輯高度類似,由於中後臺都是增刪改查表格表單佈局,若是咱們把生態建設得足夠充分了,除了剛纔說的跨團隊之間的建設可能會快一點,那麼後面甚至說可能都不須要設計師和前端了,PD 就徹底能夠在現有的生態體系裏面挑一些他想用的,咱們把能力建設的全面一些,在搭建平臺上直接可讓 PD 去調整參數,就能發佈上線。
這個是咱們正在努力的方向,按照這一方向,咱們把它分紅了三個服務,本地服務、在線標準服務、生態服務,這三個服務分別負責了不一樣的階段,這個能夠說是如今的服務化系統,是咱們管理團隊組建資產的大概結構。
這是阿里巴巴中後臺提效的路線,相信方法論是一致的,這條路對於規模沒有阿里這麼大的公司也是通用的。提煉兩點我的認爲比較關鍵的節點,與各位分享,分別是「規範統一」和「平臺建設」。
上圖爲包含關係,從面到點爲:規範的體系 > 中後臺規範 > 業務組件規範,本次分享也按照這個路徑從面到點的簡單介紹。
一個可能比較全面的前端標準規範都包含哪些內容?簡單梳理了一下,參考上圖。
這種前端的標準規範,每一個團隊可能有本身的規範內容,好比說你團隊可能就不須要 JS Bridge 規範的,那就不放進來。有些團隊可能但願把前端和後端的這種 API 規範也放進來,那就放進來。上述規範都屬於前端規範體系,這種必定範圍內的約定是提效的基礎,也是前端規模化、體系化的必要前提。
今天確實是要講一個比較關鍵的點,就是中後臺物料規範,咱們新增的這些物料規範都是前端的規範體系,這種必定範圍內的約定,是物料託管、流通的基礎,也是前端要想作成規模化體系化的前提。阿里巴巴有太多的中後臺了,天貓有中後臺,淘寶有中後臺、供應鏈有中後臺、盒馬有中後臺、餓了麼有中後臺...... 每一箇中後臺又都是相似的,「中後臺規範」的統一,是阿里集團各中後臺研發平臺可溝通、對話的基礎。
阿里的中後臺規範解決了哪些問題,都有哪些內容?物料託管、物料共享都離不開物料,物料是構成頁面的可複用單元,按照粒度的不一樣可分爲:基礎組件、業務組件、區塊、模板,按照研發模式的不一樣又能夠分爲:ProCode 物料和 LowCode 物料。
規範主要從內容定義和結構劃分上對物料進行了詳細的描述:
頁面結構元素劃分示意圖。
以「業務組件」爲切入點,簡單介紹源碼 & 搭建的規範現狀。
在將業務組件的源碼規範以前,補充一個知識點,標準的分級。參考 W3C 的規範指定,標準分爲三類:
在業務組件層面,好比「目錄規範」、「API 規範」等都是 A 級標準,必須實現;「國際化規範」「主題切換規範」都是 AA 級標準,推薦實現,但不強制。而「無障礙規範」、「轉 sketch 設計稿規範」、「跨端規範」等都是 AAA 標準,根據業務需求實現。這些規範不是實現的越多越好,是須要參考業務實際的,若是業務不須要就不必耗費開發精力去實現。
圍繞兩個 A 類規範展開說明:
build/lib
)、必須有文檔說明(README.md)、必須有可預覽的 demo 等。這個結構能夠你們做爲參考。標準 | 釋義 |
---|---|
通用規則 | API 用小駝峯,如 defaultVisible ; 組件名用大駝峯如 Menu、DatePicker |
通用命名 | 約定俗稱的規定命名,例如 size, direction, visible, disabled, htmlType |
事件 | 標準事件或者自定義的符合 w3c 標準的事件,必須以 on 開頭,如 onExpand |
表單規範 | 支持受控模式: value 控制組件數據展示;onChange 發生變化時的回調函數 |
屬性的傳遞 | 複合組件內的非核心原子組件,須要經過 xxProps 傳遞參數,如 Select 支持 popupProps |
多選枚舉 | 經過數組枚舉的方式實現,例如 Dialog 支持 closeMode={['close', 'mask', ‘esc']} |
這些是業務組件的源碼結構規範,規範統一的好處在於說,淘系的同窗開發的組件,餓了麼的同窗能夠直接拿來使用,由於組件規範統一,它徹底能夠匹配全部 BU 的開發環境,並且組件的使用習慣徹底是一致的,名字不會有任何衝突,也不會使用起來徹底不會有不溫馨的感受。
除了源碼規範以外,阿里的前端中後臺規範,還包括了搭建規範,搭建不是今天的講述重點,若是有想要發展本身搭建體系的公司的話,能夠參考一下。
業務組件的規範分了三種:
其實前端的標準規範是像法律同樣的,它是發展變化的,符合大多數人利益的。各位在建設本身團隊規範的時候,能夠參考一下這些意見:
上一章說的規範們,只是一個軟性的約束,怎麼樣能讓你們都遵循規範呢?最好的方式是經過工具,在阿里體系下是如何作這個工具,爲何是它是如今的形態呢?
視頻給你們演示一下如今的成果:
這個就是完整的一個演示的過程。
整個前端組件化的目的是爲了提效,發展到後續其實就是基於物料的提效,物料的管理天然也變成了提效的一部分。
跟你們回顧總結一下今天的分享,主要是如圖三塊內容。
如今是廣告時間,讓咱們一塊兒來建設完善這套服務化系統,創造更多可能吧~ 💃
阿里巴巴業務平臺事業部的體驗技術團隊,一個熱愛技術,致力於用技術賦能商業,敢於迎接挑戰的大前端團隊~ 👉知乎專欄。
咱們對接的業務:交易、商品、會員、評價、店鋪。簡而言之就是電商體系大閉環的核心業務平臺。除了能讓千萬消費者使用你開發的交易頁面買買買以外,你還有機會讓千萬開發使用你提供的開源庫開發出更多有趣的產品,想要知道天貓、淘寶入駐的千萬商家店鋪頁面是怎樣用搭建的方式就能快速上線的,想知道雙十一背後交易鏈路是怎樣承受住超大流量的,來就對了~
同時,咱們還擁有多個開源產品及其活躍的社區:
《驚呆了!哲學這麼好》哲學入門書,像字典同樣解釋了很多哲學名詞,配圖巧妙,還能夠 Get 很多畫圖小技巧~
別忘了第二十八屆|前端 WebGL 專場,2021 年要不要押寶 WebGL 彎道超車,6-26 全天直播,9 位講師(阿里雲/螞蟻/美團/小米等),點我上車👉 (報名地址):
全部往期都有全程錄播,能夠購買年票一次性解鎖所有
點贊,Mark 一下。