前段時間在微軟參加活動,分享了 TalkingData 開源的基於 Vue.js 的高效 UI 組件庫 iView 的一些開發經驗,現整理成文,和你們探討。
本文首發於掘金,轉載請註明出處和做者。前端
TalkingData 可視化團隊使用 Vue 有半年多時間,經歷了從開始簡單的使用雙向綁定,到後來徹底依賴 Vue 全家桶和 Webpack 的演變過程。這套開發模式驗證了多個大中型項目,開發效率有了顯著了提高,工做流也從半自動進化到了開發、灰度、生成環境的全自動,能夠說 Vue 仍是給咱們帶來了很愉快的開發體驗。
隨着組件化的不斷深刻,對組件的複用和維護成了一個問題,因而開始調研市面上的 UI 組件庫,發現基於 Vue 的大可能是移動端的,而針對 PC 中後臺的,能像阿里 Ant.Design(基於React.js) 那樣功能豐富並且高質量的,沒有看中一款,要麼就是不維護了,要麼就是功能太簡單,質量不夠高。因此咱們決定本身開發維護一套高質量的 UI 組件庫。肯定好這個目標,規劃好1.x版本後,就開始這條不歸路,最近三個多月一直投身於 iView 的開發。
至於起 iView 這個名字,其實也沒多想,以 Apple 的產品命名加上 Vue 的發音,簡單好記好讀,同時 GitHub 尚未註冊這個組織名(就爲了這些,也得把它作成一個精品😂)。vue
iView 主要適合大中型中後臺產品,好比某產品的運營平臺、數據監控平臺、管理平臺等,從工程配置、到樣式佈局,甚至後面規劃的業務套件,是一整套的解決方案,因此它可能不太適合一些 to C 的產品,好比 QQ空間 這類的。webpack
iView 固然主要的面向對象是有過 Vue 組件化開發經驗的前端工程師了,但同時對偏後端的工程師也很友好,由於咱們提供好了環境配置和豐富的文檔教程,即便對於像寫 Java 從未接觸過 Vue 開發的同窗,在一週內也能很快上手,並且基於這套解決方案開發的產品是很是高效的SPA。git
目前 iView 能夠直接經過 npm 安裝,很快將發佈一個重要版本 0.9.7,在這個版本中,咱們對大部分組件的 UI 進行了調整和優化,也豐富了不少組件的功能。
因爲 Vue 自己緣由(這裏不展開),iView 只能兼容到 IE 9+,表現最好的是 Chrome、Safari、Firefox,有些功能和動畫不能在 IE 下獲得兼容。這也和使用場景有關,通常 to B 的產品,咱們能夠要求客戶去使用高級瀏覽器。github
由於 iView 目前是在 webpack 下使用的,因此你可使用 webpack 豐富的插件和個性化配置。iView 也是使用了 ES2015 開發。
iView 一個最大的特色,就是咱們從使用者和場景出發來設計 API,這點後面會重點講到。它的文檔也是至關詳細,每一個功能都配有詳細說明和實例代碼,直接複製就可使用,咱們也計劃在明年啓動英文文檔翻譯計劃。
在開發組件時,咱們閱讀了不少已有組件庫的代碼,取長補短,實現代碼的高質量。web
iView 借鑑了 Bootstrap 和 Ant.Design 的柵格系統,支持每行最多容納 24 列的佈局,柵格系統對高級瀏覽器支持 Flex佈局,包括 Flex對齊、Flex排列、Flex順序,也支持柵格的排序、偏移、間隔。友好柵格系統對頁面的拆分佈局起到了關鍵做用,你可能不用再寫任何佈局代碼就能夠輕鬆使用柵格完成你的需求,並且它很精準。vue-cli
咱們在組件 API 的設計上下了不少功夫。不少開發者在實現一個組件時,可能從編程的難易出發思考問題,而忽略了這種設計是否對使用者友好,iView 則一切以使用者爲核心,咱們會思考這樣設計是否對使用者便利,或者若是是我用這個組件,我但願怎樣來用。舉個栗子,常見的頁面信息提示,JavaScript 原生是window.alert('something')
,可是用 Vue 來模擬出這樣一個組件,那使用方法就像是
。對的,這就是 Vue 組件的實現方法,可是,咱們真的指望這樣使用嗎,固然不是,咱們也想像原生同樣,在某個時刻,一句話就能彈出來,而不用事先埋在 HTML 裏,用一個 if 條件判斷是否顯示這個組件。
爲了更形象的介紹 iView 的 API 設計,咱們拿出了一個經常使用的組件 Modal 模態對話框,和餓了麼的 Element 及 Radon UI 這兩個組件庫進行對比。通常的 Modal 長這樣:npm
iView 在文檔編寫上也是作到了事無鉅細(因爲文檔用了一套相對重的方案來實現實例和代碼的友好分離,故目前沒有將文檔開源,咱們會在明年實現一個更好地提交文檔bug及翻譯的方案),每一個組件的每一個功能都有很是詳細的說明,包括像哪些參數須要.sync
使用,一些隱藏的功能、可能遇到的坑等等,同時每一個 demo 都有完整的代碼示例,一鍵複製,粘貼後就能夠直接看到效果。
API 也按照 props、events、slot 三部分拆分,避免混合說明遺漏和閱讀不便利。
iView 的文檔是目前全部同類文檔裏最爲詳細的,也受到了不少開發者的好評,因此咱們仍會在文檔開發的工做上保持高產出。編程
其實前文已經從各方面介紹了 iView 的高質量和豐富的功能,因此就舉兩個例子吧。後端
與瀏覽器原生不一樣的是,首先 UI 統一併且很好看,這是大部分模擬 select 的主要緣由,其次功能更增強大,支持單選、多選,鍵盤的快捷操做,還支持搜索、自定義模板、分組,以及大中小三種尺寸(iView 不少表單類組件都提供了不一樣的尺寸),在單選時還能夠清空選項。
最後要說的是與 iView 配套的工做流(github.com/icarusion/v…),好馬配好鞍,這套工做流支撐了 TalkingData 不少大型產品,從開發、灰度到上線均可以一鍵式完成,包括資源的 CDN 配置等等,無論你是新手仍是老司機,均可以從它開始開發。固然 iView 也是支持 vue-cli 的。
iView 從正式發佈1個月內,得到了不少好評,連續5天進入 GitHub Trending(固然,這離不開掘金強大的運營能力😝),在不少社區反響不錯,咱們也會繼續努力,把最好的 iView 組件庫呈現給你們。咱們也很是指望喜歡 iView 的開發者可以加入咱們,一塊兒貢獻代碼或是翻譯文檔,咱們歡迎各類形式的代碼貢獻。若是您有想法加入翻譯計劃,能夠郵件聯繫我:admin@aresn.com