餓了么基于Vue 2.0的通用組件庫開發(fā)之路

本文為2016年11月9日,『前端之巔』微信群在線分享活動總結(jié)整理而成,轉(zhuǎn)載請在文章開頭處注明來自『前端之巔』公眾號怠肋。加群學(xué)習(xí)請關(guān)注『前端之巔』公眾號并發(fā)送“加群”坚冀。

原文鏈接:http://mp.weixin.qq.com/s?__biz=MzIwNjQwMzUwMQ==&mid=2247484467&idx=1&sn=8643c5945adb151db9c6fe757cd6adfa&chksm=972366f1a054efe733e01069b2adb81d453a2c30bbc5329c77948e8160090294bf14918381a1#rd

Element 是由餓了么UED設(shè)計、餓了么大前端開發(fā)的一套基于 Vue 2.0 的桌面端組件庫瀑焦。今天我們要分享的就是開發(fā) Element 的一些心得。
一、設(shè)計目的

大部分項目起源都是源于業(yè)務(wù)方的需求裆甩,Element 也是一樣。隨著公司的業(yè)務(wù)發(fā)展齐唆,內(nèi)部開始衍生出很多后臺系統(tǒng)嗤栓,UED 部門也接到越來越多的設(shè)計需求。分析這整個過程箍邮,我們發(fā)現(xiàn)如下問題:
日漸增多的后臺產(chǎn)品設(shè)計需求

設(shè)計資源有限茉帅,沒辦法支持所有業(yè)務(wù)線

公司內(nèi)部諸多后臺產(chǎn)品使用體驗不一致

于是我們決定:
設(shè)計一套后臺支撐框架叨叙,提升后臺系統(tǒng)的可用性和一致性

套用此框架,即使沒有設(shè)計師參與担敌,也能讓產(chǎn)品或開發(fā)設(shè)計出一套好用的后臺系統(tǒng)

二摔敛、設(shè)計階段

下面簡單說一下設(shè)計 Element 經(jīng)歷的幾個階段。
了解業(yè)務(wù)并熟悉公司內(nèi)各后臺產(chǎn)品全封,尋找業(yè)務(wù)上的共性問題
設(shè)計的目的是為了業(yè)務(wù)服務(wù)马昙。第一步我們從內(nèi)部系統(tǒng)開始入手,了解公司內(nèi)部在使用的各種后臺系統(tǒng)刹悴,將其組件抽象剝離行楞,尋找共性特征。
專注業(yè)務(wù)組件設(shè)計
總結(jié)了公司不同系統(tǒng)不同組件的使用情況后土匀,我們打算從業(yè)務(wù)組件入手子房,因為這部份是由公司特殊需求衍生的解決方案。解決了這些棘手的問題就轧,也能給其他后臺產(chǎn)品帶來好的設(shè)計引導(dǎo)证杭。
尋求開發(fā)支持
到這一步,我們開始尋找公司內(nèi)部的開發(fā)團(tuán)隊妒御,并在這時才得知不同團(tuán)隊里使用著不同的前端框架解愤,有 Vue、React乎莉、Angular 等送讲。
與大前端合作
大前端作為獨立的前端團(tuán)隊,有能力開發(fā)底層的工具去服務(wù)不同業(yè)務(wù)惋啃,并且 Vue 也是一套年輕且發(fā)展方向很好的一個技術(shù)棧哼鬓。UED 與大前端的合作一拍即合。
方向轉(zhuǎn)變边灭,專注于基礎(chǔ)組件
跟大前端接觸后异希,才發(fā)現(xiàn)最開始的方向并不正確,因為業(yè)務(wù)變化過快绒瘦,即使有通用的業(yè)務(wù)組件宠互,也很難跟上需求的變化,而基礎(chǔ)組件才是所有開發(fā)團(tuán)隊都需要的通用組件椭坚。這時候我們開始把方向調(diào)整為基礎(chǔ)組件的設(shè)計予跌。
組件交互完成,進(jìn)行視覺封裝善茎,并搭建主體網(wǎng)站
前期的設(shè)計工作主要是由交互設(shè)計師進(jìn)行設(shè)計券册,等確認(rèn)完所有組件的功能和交互后,開始進(jìn)行視覺階段,這中間包括制定顏色烁焙、字體等各類規(guī)范航邢,也同時進(jìn)行主體網(wǎng)站的設(shè)計。


輸出 UI Kit 文件骄蝇,統(tǒng)一設(shè)計規(guī)范


第一版網(wǎng)站設(shè)計膳殷,此處的「特殊組件」即業(yè)務(wù)組件。

網(wǎng)站二次設(shè)計
第一版網(wǎng)站上線后視覺效果并不好九火,我們內(nèi)部進(jìn)行了調(diào)整赚窃,再次上線后就是大家現(xiàn)在看到的樣子。


設(shè)計過程簡單來說就經(jīng)歷了這幾個階段岔激,如還有問題可以繼續(xù)交流勒极,下面進(jìn)入開發(fā)階段。
三虑鼎、開發(fā)目的

后臺系統(tǒng)缺乏一套完整的基礎(chǔ)組件庫

Vue 在公司內(nèi)部是一個比較年輕的技術(shù)棧辱匿,希望做一些基礎(chǔ)設(shè)施的建設(shè)

提升公司在技術(shù)社區(qū)的影響力

四、開發(fā)流程

進(jìn)入開發(fā)階段后炫彩,在總體架構(gòu)方面我們做了一些嘗試匾七,下面按照時間順序分享給大家:
1.如何與設(shè)計師進(jìn)行配合

經(jīng)過項目初期開發(fā)和設(shè)計的磨合,我們提煉了一套組件開發(fā)流程:
根據(jù)交互稿和視覺稿進(jìn)行開發(fā)江兢,期間與設(shè)計師保持溝通

開發(fā)完成后自測昨忆,之后提交設(shè)計師驗收

設(shè)計師提出修改意見,根據(jù)意見進(jìn)行修改

完成組件開發(fā)划址,為網(wǎng)站編寫例子和文檔

2.如何管理多組件項目

在開發(fā)之初扔嵌,我們就在思考如何降低組件的耦合度限府,確保組件可以獨立工作夺颤。這樣的目的是可以保證組件可以依賴其他組件、讓用戶只加載其中幾個組件甚至在安裝時只安裝需要的組件胁勺。最先想到的做法是一個組件單獨一個倉庫世澜,而組件庫項目就是把組件作為依賴引入。
但是由于人手不足署穗,這樣的機(jī)制導(dǎo)致開發(fā)太耗時間寥裂,每個組件都需要單獨維護(hù)和打包,同時還要維護(hù)組件庫項目的各依賴的版本號案疲。我們只能另尋方案封恰。后來參考了 babel 項目的管理方式:所有子項目放在 packages/
目錄里,一個子項目可以當(dāng)作一個獨立的倉庫褐啡。通過 lerna 來管理子項目的依賴和發(fā)布诺舔。
結(jié)合自身項目的特點以及 babel 的這套機(jī)制,我們重構(gòu)了目錄結(jié)構(gòu):組件可單獨作為一個項目放在 packages/
,共用函數(shù)放在 src/
里低飒。最后的打包結(jié)果會將整個組件打包成一個文件许昨、組件分別打包成獨立文件,同時發(fā)布時還將發(fā)布組件庫和獨立組件褥赊,滿足不同用戶的使用需求糕档。



3.如何解決自定義主題

開發(fā)一套組件庫就離不開定制主題的需求。類名要足夠友好拌喉,盡量避免存在樣式層級嵌套速那,這樣在直接覆蓋樣式或者單獨寫一套主題都會方便許多。所以我們采用 BEM 的方式管理類名司光,同時盡可能將屬性值用變量代替琅坡,維護(hù)一份變量文件便于直接修改變量就能定制一套主題。
考慮到不同用戶的使用習(xí)慣残家,我們沒有選用 Less 或 Sass 之類的有各自風(fēng)格的預(yù)處理器榆俺,而是選用了更接近未來標(biāo)準(zhǔn)的 CSS4 風(fēng)格的語法,用 PostCSS 和整合了 postcss-bem 和 postcss-cssnext 等插件的 postcss-salad 開發(fā)坞淮。
為了降低用戶自定義主題的上手成本茴晋,我們還提供了命令行工具指導(dǎo)用戶快速自定義一套主題。
4.如何提供一份直觀的文檔

文檔不僅是讓用戶看起來直觀回窘,也要讓編寫者寫起來直觀诺擅。所以最簡單的方式是用 Markdown 寫文檔。但是就會產(chǎn)生另一個問題:如何在文檔里寫可運行的示例啡直?常規(guī)的做法是把文檔寫在 Vue 文件里烁涌,這樣就可以在里面調(diào)用其他組件,但是這樣就違背了寫「直觀」文檔的初衷酒觅。
經(jīng)過幾番嘗試撮执,結(jié)合 Vue 的特點。我們寫了一套處理 Markdown 文件的 webpack loader舷丹,可以將 Markdown 轉(zhuǎn)成 Vue 文件抒钱,不僅降低了文檔的維護(hù)成本,同時也將文檔里運行組件示例變成可能颜凯。
5.多語言官網(wǎng)如何配置和管理

Element 在立項之初其實并沒有考慮國際化的問題谋币。項目開源之后,我們陸續(xù)收到了一些外國開發(fā)者的反饋症概,希望能夠增加英文文檔蕾额。不久之后,國內(nèi)的一個翻譯團(tuán)隊主動聯(lián)系到了我們彼城,為 Element 貢獻(xiàn)了整套英文文檔诅蝶。
有了英文文檔就需要有英文網(wǎng)站逼友,這就需要對官網(wǎng)的現(xiàn)有結(jié)構(gòu)進(jìn)行修改和升級;同時為了面向未來秤涩,需要官網(wǎng)能夠兼容除英語外的其他多語言帜乞。為此我們做了以下工作:
(1)路由
官網(wǎng)的路由是根據(jù)一個記錄了導(dǎo)航信息的 json
文件自動生成的。因此需要在這個 json
文件中添加對應(yīng)于其他語言的字段筐眷,并且根據(jù)新的數(shù)據(jù)結(jié)構(gòu)修改路由生成的邏輯黎烈。
(2)頁面
官網(wǎng)中除了文檔外,還有一些介紹性質(zhì)的頁面匀谣。這些頁面中文字比較多照棋,如果人工管理每種語言的頁面,若需要修改則必須去每個頁面相應(yīng)的位置進(jìn)行編輯武翎,有些繁瑣烈炭。我們的做法是:每個頁面對應(yīng)一個模板,模板中的文字全部抽取到一個語言配置文件中宝恶,并且寫了一個腳本生成最終的頁面符隙。這樣在需要修改時,只需在語言配置文件中編輯對應(yīng)的字段即可垫毙。
(3)網(wǎng)站組件
對于 header
霹疫、footer
等通用的頁面組件,我們采取了和上面類似的策略综芥。但由于組件內(nèi)的文字較少丽蝎,于是沒有再使用模板,而是通過路由判斷應(yīng)該顯示何種語言膀藐。



中英文網(wǎng)站的顯示效果

至此屠阻,我們也逐漸完善了技術(shù)棧。用 ES2015 和 CSS4 作開發(fā)語言额各、Lerna 負(fù)責(zé)管理組件国觉、用 Karma 搭配 Mocha 和 Chai 等工具在 Travis CI 里做持續(xù)集成測試,最后用 Markdown 結(jié)合 Vue 寫文檔臊泰。我們甚至還在 CI 里實現(xiàn)了自動部署網(wǎng)站和推送主題倉庫代碼等功能蛉加,提升了不少開發(fā)效率蚜枢。



6.開發(fā)過程中遇到的問題

具體到組件層面缸逃,在開發(fā)的過程中不可避免地會遇到一些問題。下面是我們的一些應(yīng)對策略厂抽,希望能夠拋磚引玉需频,引發(fā)大家的思考和討論。
如何應(yīng)對父子組件間事件派發(fā)機(jī)制的改變
在 Vue 2.0 中筷凤,用于父子組件間事件通信的 $dispatch
和 $broadcast
被移除了昭殉。官方的考慮是苞七,基于組件樹結(jié)構(gòu)的事件流方式讓人難以理解,并且在組件結(jié)構(gòu)擴(kuò)展的過程中會變得越來越脆弱挪丢。但是類似 Element 這樣的組件庫有幾個特點:首先蹂风,父子組件間互相通信的場景非常常見,比如在一個帶有驗證功能的表單里乾蓬,每個表單項在 change
或 blur
時需要通知表單組件進(jìn)行校驗惠啄;其次,組件的結(jié)構(gòu)相對來說比較固定任内。
出于以上考慮撵渡,我們實現(xiàn)了簡化版的 dispatch
和 broadcast
,并把它們包裝成了一個 mixin
死嗦,方便在需要時調(diào)用趋距。其中的 dispatch
代碼如下:
dispatch(componentName, eventName, params) { var parent = this.$parent || this.$root; var name = parent.$options.componentName; while (parent && (!name || name !== componentName)) { parent = parent.$parent; if (parent) { name = parent.$options.componentName; } } if (parent) { parent.$emit.apply(parent, [eventName].concat(params)); } }

可以看出,我們的實現(xiàn)需要在調(diào)用時傳入 componentName
(在各個組件中定義)越除,這樣就確保了事件只會在正確的組件中觸發(fā)节腐。
是否需要為用戶代理自定義組件上的原生事件
在 Vue 2.0 中的自定義組件上使用 v-on
只會監(jiān)聽自定義事件(即組件用 $emit
觸發(fā)的事件)。如果要監(jiān)聽原生事件摘盆,必須使用 .native
修飾符:
<mt-component @click.native="handleClick"></my-component>

這樣一來铜跑,很多不太熟悉 Vue 2.0 語法的用戶會發(fā)現(xiàn)給 Element 的組件綁定原生事件總是不生效。事實上骡澈,我們從開源以來收到的 issue 里被問得最多的一個問題是:如何給 Button
組件綁定 click
事件锅纺?
事實上我們只需要添加一行代碼就能解決問題,但是關(guān)于是否需要讓用戶可以直接監(jiān)聽原生事件這件事在我們內(nèi)部有兩種不同的觀點:一邊認(rèn)為應(yīng)該遵循 Vue 的設(shè)計思想肋殴,原生事件要加 native囤锉;另一邊認(rèn)為 button 最常用的就是 click 事件,幫助用戶做這件事可以降低學(xué)習(xí)成本护锤。后來我們專門咨詢了尤雨溪本人官地,他的觀點是,對于一些組件的常用事件烙懦,可以允許用戶直接監(jiān)聽原生事件驱入,同時在文檔中說明哪些事件可以直接監(jiān)聽,哪些事件需要加 .native
修飾符氯析。最后我們決定從易用性的角度出發(fā)亏较,讓用戶在使用 Button
組件時可以監(jiān)聽原生 click
事件,因為對于桌面端來說掩缓,Button
在絕大部分場景下都是需要監(jiān)聽點擊事件的雪情。 現(xiàn)在的 Button
支持以下兩種寫法:
<el-button @click.native="handleClick">Click Me!</el-button> <el-button @click="handleClick">Click Me!</el-button>

版本迭代的過程中,若 API 發(fā)生變化你辣,如何友好地提示用戶
在歷次迭代中巡通,我們會盡量保持 API 的一致尘执。但是在一些萬不得已的情況下,需要對 API 作出一些更新宴凉。對于老版本的用戶而言誊锭,如果使用了被移除的 API,升級到新版后會出現(xiàn)一些意料之外的報錯信息弥锄。為了友好地幫助用戶盡快找到報錯的來源炉旷,我們編寫了一個 mixin
,當(dāng)組件的 API 發(fā)生變化時叉讥,在組件中引入這個 mixin
并列出變化前后的字段名即可窘行。
mixin
的核心代碼為:
const { props, events } = this.getMigratingConfig(); const { data, componentOptions } = this.$vnode; const definedProps = data.attrs || {}; const definedEvents = componentOptions.listeners || {}; for (let propName in definedProps) { if (definedProps.hasOwnProperty(propName) && props[propName]) { console.warn([Element Migrating][Attribute]: ${props[propName]}); } } for (let eventName in definedEvents) { if (definedEvents.hasOwnProperty(eventName) && events[eventName]) { console.warn([Element Migrating][Event]: ${events[eventName]}); } }

引用了這個 mixin
的組件需要在 methods
中添加一個名為 getMigratingConfig
的方法,返回一個包含發(fā)生變化的 API 字段名和對應(yīng)提示信息的對象:
getMigratingConfig() { return { props: { 'selection-mode': 'Table: selection-mode has been removed.' }, events: { cellclick: 'Table: cellclick has been renamed to cell-click.' } }; }

五图仓、issue 處理方式

我們選擇使用 Tower 來配合 GitHub 進(jìn)行 issue 的追蹤和處理罐盔。首先在 Tower 上建立幾個清單:Plan、Design救崔、Develop 和 Release惶看。隨后具體的操作流程如下:
從各渠道收集反饋

若不需設(shè)計,則由開發(fā)回復(fù)

若需設(shè)計跟進(jìn)六孵,則在 GitHub 上添加標(biāo)簽 design
纬黎,并在 Tower 的 Plan 清單中添加相應(yīng)任務(wù)

開始處理任務(wù)后,為 GitHub 的對應(yīng) issue 添加 working in progress
標(biāo)簽劫窒,同時把任務(wù)拖進(jìn) Tower 的 Design 清單

設(shè)計完成后本今,開發(fā)接手,同時把任務(wù)拖進(jìn) Develop 清單

開發(fā)完成主巍,經(jīng)過設(shè)計師驗收通過后將改動推送至 GitHub 倉庫冠息,關(guān)閉相應(yīng) issue,最后將任務(wù)拖進(jìn) Release 清單

六孕索、總結(jié)

Element 從立項至今已經(jīng)走過了五個月的時間逛艰。總的來說搞旭,這段時間就是一個不斷發(fā)現(xiàn)問題和解決問題的過程散怖,也是每個參與者自身成長的過程。開發(fā)時 Vue 2.0 正處于 RC 階段肄渗,我們隨著它的版本迭代踩到了不少坑镇眷,同時也給 Vue 提了一些 issue,并且都得到了 Vue 團(tuán)隊的處理恳啥。在此向Vue 團(tuán)隊的專業(yè)精神表示感謝偏灿。
自從 9 月開源以來丹诀,在社區(qū)的幫助下钝的,Element 逐漸成熟翁垂,我們也在今天發(fā)布了它的第一個正式版本。希望越來越多的人能夠參與進(jìn)來硝桩,和我們一起把 Element 做得更好沿猜。
七、參考資料

https://github.com/babel/babel

https://github.com/lerna/lerna

https://github.com/ElemeFE/postcss-salad

https://github.com/QingWei-Li/vue-markdown-loader

https://github.com/ElemeFE/cooking

精彩問答

淀粉提問:Element官網(wǎng)是多少碗脊?
Element開發(fā)團(tuán)隊:官網(wǎng)是 http://element.eleme.io
淀粉提問:如何修改樣式啼肩?
Element開發(fā)團(tuán)隊:簡單的樣式可以通過覆蓋來修改;對于大規(guī)模的自定義衙伶,我們提供了一套自定義主題的工具祈坠,文檔看這里:https://github.com/ElemeFE/element/blob/master/custom-theme.md 。簡單來說矢劲,通過修改樣式變量赦拘、編譯主題、引入主題芬沉,就可以實現(xiàn)自定義主題躺同。
淀粉提問:Vue的作者給出了一套學(xué)習(xí)Vue路徑,那Element是否有閱讀源碼的路徑呢丸逸,怎么樣才可以較為方便的理解源碼蹋艺,并且在基礎(chǔ)組件不能滿足自己業(yè)務(wù)的時候?qū)懗鲎约旱慕M件呢?
Element開發(fā)團(tuán)隊:閱讀源碼的話黄刚,可以先 clone 項目后捎谨,先試試用 npm run new 指令創(chuàng)建一個新組件,看看我們的一個組件包含了哪些東西憔维。要理解源碼的話就自己邊改代碼邊測試效果吧侍芝。
淀粉提問:怎么看待Vue添加redux,而又保留雙向綁定的數(shù)據(jù)方式?
Element開發(fā)團(tuán)隊:不太明白想問什么埋同。
淀粉提問:國際化網(wǎng)站怎么做的州叠,是每種語言對應(yīng)一個頁面嗎,還是統(tǒng)一的一個頁面凶赁?
Element開發(fā)團(tuán)隊:Element 的主頁是一個 SPA咧栗,每種語言對應(yīng)了一個 .vue 文件,而這些 .vue 文件是通過一個統(tǒng)一的模板和語言配置文件生成出來的虱肄。
淀粉提問:請問會推出專門針對移動端的Vue2組件庫嗎致板?
Element開發(fā)團(tuán)隊:目前沒有將 Element 移植到移動端的計劃。不過咏窿,我們已經(jīng)有一套移動端組件庫了:https://github.com/ElemeFE/mint-ui 斟或,它有兩個版本,分別兼容 Vue 1.x 和 2.0集嵌。
淀粉提問:寫在 Vue 文件中的 MarkDown 輸出在哪里萝挤?這并不是顯示效果的一部分呀御毅?
Element開發(fā)團(tuán)隊:Vue 和 MarkDown 的結(jié)合,我們是自己做了一個 vue-markdown-loader, 作用是將 MarkDown 文件轉(zhuǎn)成 Vue 組件(生成的文件在插件的 .cache 目錄里)怜珍,最后通過 vue-loader 處理端蛆。可以去看看這個 loader 的源碼就明白了酥泛。
淀粉提問:既然是基于Vue了今豆,那么Element還有繼續(xù)的必要嗎?而且目前框架那么多柔袁,Vue也得到了人的認(rèn)可呆躲。Element以后得生態(tài)如何保證?畢竟還只有目前餓了么一個團(tuán)隊在用捶索。
Element開發(fā)團(tuán)隊:不太清楚“Element還有繼續(xù)的必要”是什么意思歼秽,據(jù)我們在 Gitter 對用戶的了解,現(xiàn)在已經(jīng)有不少用戶將 Element 實用到他們公司的產(chǎn)品開發(fā)里情组。Element 的生態(tài)發(fā)展除了我們團(tuán)隊本身以外還需要依靠開源的力量來進(jìn)行優(yōu)化和發(fā)展燥筷。
淀粉提問:在組件開發(fā)中,有對復(fù)用性很高的業(yè)務(wù)組件做過積累嗎?如果做過~是怎么維護(hù)這些業(yè)務(wù)組件的院崇?也是同邏輯組件的維護(hù)方法一樣嗎肆氓?
Element開發(fā)團(tuán)隊:組件開發(fā)中會不斷收到各種的功能需求的反饋,通過 GitHub 倉庫 issue 來推動我們組件的功能更新和維護(hù)底瓣。不太清楚“邏輯組件”的含義谢揪,Element 里除了按鈕這樣特殊的組件外都是帶有邏輯的。
淀粉提問:請問將常見的jq插件或者說jq動效寫成Vue組件的過程中有什么不順暢的地方嗎捐凭?
Element開發(fā)團(tuán)隊:在組件開發(fā)過程中沒有參考任何 jq 插件的動效拨扶。實際上基于 mvvm 框架下的組件庫開發(fā)相對于 jq 是輕松很多的,因為你不需要手動地處理事件綁定和視圖的更新茁肠。
淀粉提問:分享的文檔是否有些陳舊沒有更新患民,Vue 目前已經(jīng)不是 RC階段了。
Element開發(fā)團(tuán)隊:文檔中說「開發(fā)時」Vue 還處于 RC 階段垦梆,主要指的是今年的八九月份匹颤,那時 Vue 每更新一個 RC 版本,我們就跟著做一遍測試托猩,然后發(fā)現(xiàn)幾個 bug 的情景還歷歷在目印蓖。Vue 2.0 是上個月正式發(fā)布的,我們也在今天發(fā)布了 Element 的正式版京腥。
淀粉提問:有沒有模板可以參考赦肃?
Element開發(fā)團(tuán)隊:有,看這里:https://github.com/ElementUI/element-starter。如果熟悉 cooking 或 laravel他宛,我們也提供了相應(yīng)的模板:https://github.com/ElementUI/element-cooking-starter 船侧、 https://github.com/ElementUI/element-in-laravel-starter
淀粉提問:Element的開發(fā)者都是餓了么前端團(tuán)隊的嗎堕汞,團(tuán)隊外的開發(fā)者占多少勺爱?
Element開發(fā)團(tuán)隊:是的晃琳。不過自從 Element 開源以來讯检,社區(qū)出現(xiàn)了一批熱心用戶,他們也貢獻(xiàn)了自己的代碼卫旱。所有貢獻(xiàn)者可以從這里看到:https://github.com/ElemeFE/element/graphs/contributors 人灼。
淀粉提問:幾年前,不計算Gzip 90kb的jQuery遭到了人們的嫌棄:太大了顾翼,還是用原生吧投放。 幾年后,開啟Gzip后 仍有300kb的基于React的項目适贸,人們覺得:區(qū)區(qū)300kb而已灸芳,算很小了。巨型庫的概念流行后拜姿,人們似乎忘了啪啪啪在臉上有多疼烙样。你怎么看?
Element開發(fā)團(tuán)隊:這幾年網(wǎng)速已經(jīng)提升不少蕊肥,同時前端項目的復(fù)雜度也變得越來越高谒获。比起庫的體積,可能現(xiàn)在開發(fā)效率才是開發(fā)者所關(guān)心的壁却。
淀粉提問:Element這套組件和Ant Design感覺有點類似批狱,是否有借鑒過他們的設(shè)計?
Element開發(fā)團(tuán)隊:有借鑒過展东,我們不僅借鑒過 AntDesign赔硫,國內(nèi)外大大小小的 Design Language 都有借鑒學(xué)習(xí)。很多信息前人已經(jīng)總結(jié)過盐肃,我們希望可以快速的獲得這些知識卦停,以便更快的走到前方去探索更前沿的設(shè)計。
淀粉提問:感謝分享恼蓬。目前有沒有優(yōu)秀應(yīng)用案例可以分享惊完?
Element開發(fā)團(tuán)隊:目前我們還沒有精力去收集整理使用了 Element 的項目,不過按照最近一段時間在 Gitter 里討論看到了一些開發(fā)者分享的項目鏈接处硬,完成質(zhì)量還是挺高的小槐。過段時間我們會在 issue 里開始征集大家使用 Element 組件庫的作品鏈接做分享。
淀粉提問:如何定制CSS,是覆蓋還是改源碼凿跳?改了源碼如果Element版本更新之后 樣式就沒了件豌?
Element開發(fā)團(tuán)隊:可以用 element-theme 主題自定義工具,或者直接下載 element-theme-default 主題包自己修改主題控嗜。如果只是簡單的修改茧彤,建議直接覆蓋樣式。
淀粉提問:您好疆栏,我是個初學(xué)者曾掂,看不大懂編程,初學(xué)要做前端壁顶,應(yīng)該先從哪開始入手學(xué)習(xí)珠洗?
Element開發(fā)團(tuán)隊:freecodecamp 和 codecademy 都是很好的入門途徑。
淀粉提問:在技術(shù)選型的時候若专,基于什么考慮许蓖,選擇了Vue奢赂,而不是React讥邻?
Element開發(fā)團(tuán)隊:和 React 相比,我們公司前端使用 Vue 的更多管毙。為了照顧到大多數(shù)人嚎莉,我們選用 Vue 作為 Element 的框架米酬。
淀粉提問:我在寫 Vue 的組件通信中,也發(fā)現(xiàn)事件比較好用但不容易被控制萝喘,因此一般是給自定義事件加上命名空間淮逻,如 “$dispatch('AComponent::rotate', 90),”Element 團(tuán)隊有這樣的實踐嗎阁簸?
Element開發(fā)團(tuán)隊:在 Element 的組件中對組件通信這一塊并沒有用到全局的 event bug爬早,而是通過dispatch和broadcast來進(jìn)行相互依賴的組件間的通信。雖然Vue2.0里棄用了$dispatch和$broadcast的api启妹,但我們自己在組件庫中封裝了一遍筛严。
淀粉提問:Element 團(tuán)隊使用 Vuex 時的一些具體情景是什么?
Element開發(fā)團(tuán)隊: Element 沒有用到 Vuex 的情景饶米。
淀粉提問:后續(xù)是否會開放一些常見業(yè)務(wù)組件桨啃,比如城市選擇等?
Element開發(fā)團(tuán)隊:與后臺業(yè)務(wù)關(guān)聯(lián)很大的組件應(yīng)該不會直接開放檬输,不過這個組件如果能解決類似的其他問題照瘾,我們會抽離業(yè)務(wù)屬性將之作為「基礎(chǔ)組件」開放出來。城市選擇只用了比較基礎(chǔ)的 Select 組合而已丧慈。
淀粉提問:Element 在做動畫效果這個方向上有些什么成績呢析命?
Element開發(fā)團(tuán)隊:動畫效果方面我們還沒有人力去探索和研究主卫,主要精力還是放在業(yè)務(wù)系統(tǒng)的搭建上。
嘉賓簡介


Element 開發(fā)團(tuán)隊
照片從左到右依次為:
FuryBean鹃愤、cinwell簇搅、楊奕、曾海平软吐、敖天羽瘩将、Fishpaw、Fredddli凹耙、梓非徐

Element 開發(fā)團(tuán)隊由餓了么 UED 的設(shè)計師和大前端的工程師組成姿现,他們協(xié)作開發(fā)了 Element ——一套基于 Vue 2.0 的桌面端組件庫。
今日薦文

Vue相關(guān)內(nèi)容推薦:
Vue作者尤雨溪:Vue 2.0使兔,漸進(jìn)式前端解決方案

Vue 2.0 快速上手指南

更輕更快的Vue.js 2.0與其他框架對比

Vue.js作者尤雨溪加盟Weex項目擔(dān)任技術(shù)顧問

往期精彩分享:
滴滴:公司級組件庫以及MIS系統(tǒng)的技術(shù)實踐


http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20160603-1464952710155042972.jpg
http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20160603-1464952710155042972.jpg

長按二維碼關(guān)注
** 前 端 之 巔** 緊 跟 前 端 發(fā) 展 共 享 一 線 技 術(shù) 不 斷 學(xué) 習(xí) 進(jìn) 步 攀 登 前 端 之 巔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末建钥,一起剝皮案震驚了整個濱河市藤韵,隨后出現(xiàn)的幾起案子虐沥,更是在濱河造成了極大的恐慌,老刑警劉巖泽艘,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件欲险,死亡現(xiàn)場離奇詭異,居然都是意外死亡匹涮,警方通過查閱死者的電腦和手機(jī)天试,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來然低,“玉大人喜每,你說我怎么就攤上這事■ㄈ粒” “怎么了带兜?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吨灭。 經(jīng)常有香客問我刚照,道長,這世上最難降的妖魔是什么喧兄? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任无畔,我火速辦了婚禮,結(jié)果婚禮上吠冤,老公的妹妹穿的比我還像新娘浑彰。我一直安慰自己,他們只是感情好拯辙,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布郭变。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪饵较。 梳的紋絲不亂的頭發(fā)上拍嵌,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機(jī)與錄音循诉,去河邊找鬼横辆。 笑死,一個胖子當(dāng)著我的面吹牛茄猫,可吹牛的內(nèi)容都是我干的狈蚤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼划纽,長吁一口氣:“原來是場噩夢啊……” “哼脆侮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勇劣,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤靖避,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后比默,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幻捏,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年命咐,在試婚紗的時候發(fā)現(xiàn)自己被綠了篡九。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡醋奠,死狀恐怖榛臼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窜司,我是刑警寧澤沛善,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站例证,受9級特大地震影響路呜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜织咧,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一胀葱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧笙蒙,春花似錦抵屿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搂抒。三九已至,卻和暖如春尿扯,著一層夾襖步出監(jiān)牢的瞬間求晶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工衷笋, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留芳杏,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓辟宗,卻偏偏與公主長得像爵赵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子泊脐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 干貨滿滿的巔峰分享再次來襲空幻,這次為大家?guī)矸窒淼模莵碜责I了么的Element 開發(fā)團(tuán)隊的所有成員容客,他們將為大家?guī)?..
    尾尾閱讀 271評論 0 0
  • 我叫若晨秕铛,他叫蕭杰。 我坐在第七排耘柱,他坐在第五排如捅。 我15歲棍现,他16歲 我很喜歡他调煎,但他卻不知道。 每天我...
    野茉莉的幽香閱讀 378評論 1 6
  • 首先己肮,我很喜歡葉春好士袄。她本家庭富裕,不料家道中落谎僻,被跑路的家人放棄娄柳,獨自面對討債人。這時無依無靠的她遇到了對她掏心...
    紈绔天下閱讀 6,197評論 0 0
  • 即上周六家里收養(yǎng)了流浪貓咪咪之后艘绍,這周六又收養(yǎng)了一只媽媽被撞死的小狗狗赤拒,我們叫他小白。加上家里的烏龜诱鞠、各種小魚挎挖、鸚...
    聽雨廿一閱讀 213評論 0 1
  • 1、清晨醒來航夺,我很感激蕉朵,啊清晨了,美好的一天就要開始了阳掐,感謝昨晚那一夜良好的睡眠始衅,感謝昨晚精油的助眠冷蚂,美美滴,香香...
    我是愛笑的琴子閱讀 202評論 0 0