Vue組件庫大對比--HeyUI, iView, Element
目前,市面上主流的Vue組件庫大概就是iview, element。
當然,heyui不在範圍內,38個star屈指可數,大部分還是認識的同事。更可惡的還是騙不來後端同學的star,心塞。求Star(小????):Github
官網: http://www.heyui.top
關於對比
對比呢,我總共出了幾個緯度:
- 入門方式
- 功能
- 組件調用
- 項目大小與依賴
- 使用率
入門方式
按需載入
element,iview都支持按需載入。
heyui不支持。關於支不支持按需載入,思考了很久。也許element, iview還可以,但是如果heyui拆分組件使用,整體優勢不大,後面我再介紹。樣式自定義
其實,這裡三個組件都是差不多的。 element使用scss,iview和heyui使用less,使用變數覆蓋的方式就可以了。
element提供了一個主題生成的工具,對應iview也有一個,但是這是一開始的方式了,現在大家都是推薦變數覆蓋的方式。這裡,我就要推薦我們的腳手架hey-cli,我把這些變數不是採用覆蓋的方式,而是使用全局化的方式。這樣,你的@primary-color一樣可以在vue的<style lang="less"/>
中使用。
參考:hey-cli-template中heyui的demo
或者可以看一下:前端開發大殺器hey-cli國際化
element,iview都支持國際化。
heyui不支持。傷心。嗯嗯,如果需要國際化支持的項目,請移步element,iview。我想說,其實heyui國際化的機制都已經寫好了,缺翻譯人員support,有意願的人可以找我哦。總結
其實按需載入與國際化都屬於極少數的需求,按需載入,我應該不會做這一方面的支持的。
如果有一些不同意見的人,歡迎討論。PS: 按需載入還是需要載入所有的樣式的。至於國際化,如果有需求或者可以提供幫助的人,歡迎聯繫。
功能
功能列表
主要的功能對比來了。
目前,市面上主流的Vue組件庫大概就是iview, element。
當然,heyui不在範圍內,38個star屈指可數,大部分還是認識的同事。更可惡的還是騙不來後端同學的star,心塞。求Star(小????):Github
官網: http://www.heyui.top
關於對比
對比呢,我總共出了幾個緯度:
- 入門方式
- 功能
- 組件調用
- 項目大小與依賴
- 使用率
入門方式
按需載入
element,iview都支持按需載入。
heyui不支持。
關於支不支持按需載入,思考了很久。也許element, iview還可以,但是如果heyui拆分組件使用,整體優勢不大,後面我再介紹。樣式自定義
其實,這裡三個組件都是差不多的。 element使用scss,iview和heyui使用less,使用變數覆蓋的方式就可以了。
element提供了一個主題生成的工具,對應iview也有一個,但是這是一開始的方式了,現在大家都是推薦變數覆蓋的方式。這裡,我就要推薦我們的腳手架hey-cli,我把這些變數不是採用覆蓋的方式,而是使用全局化的方式。這樣,你的@primary-color一樣可以在vue的<style lang="less"/>
中使用。參考:hey-cli-template中heyui的demo或者可以看一下:前端開發大殺器hey-cli
國際化
element,iview都支持國際化。
heyui不支持。
傷心。嗯嗯,如果需要國際化支持的項目,請移步element,iview。我想說,其實heyui國際化的機制都已經寫好了,缺翻譯人員support,有意願的人可以找我哦。總結
其實按需載入與國際化都屬於極少數的需求,按需載入,我應該不會做這一方面的支持的。
如果有一些不同意見的人,歡迎討論。PS: 按需載入還是需要載入所有的樣式的。至於國際化,如果有需求或者可以提供幫助的人,歡迎聯繫。功能
功能列表
主要的功能對比來了。
其實,element和iview的功能都比較類似,而heyui相對來說,和他們的區別有一些大。
首先,基礎的組件都是有的,那區別在哪裡呢?heyui獨有的組件:- Extend 樣式擴展:基礎樣式。
- TagInput 標籤輸入框:其實其他兩個組件有類似功能,但是其實不太一樣。
- DateFullRangePicker 超級日期:功能十分強大的日期範圍選擇器。
- TreePicker 樹選擇:可以替代
Transfer 穿梭框
或者與Cascader 級聯選擇
,功能更強大。 - Category 分類選擇:與
Cascader 級聯選擇
組件其實是類似的功能,但是heyui支持單選,多選,key模式與對象模式。 - DropdownCustom 下拉控制項:自定義的下拉組件。
- ScrollIntoView 滾動至視圖內:相信很多地方你都會需要。
- Search 搜索框:搜索框的樣式與機制集成。
heyui沒有的組件:
- Transfer 穿梭框:有替代組件
- Cascader 級聯選擇:有替代組件
- Breadcrumb 麵包屑:樣式
- Carousel 走馬燈:我會選用Swiper。
- Collapse 摺疊面板:樣式
- Avatar 頭像:樣式
- Alert 警告提示:樣式
- ColorPicker 顏色選擇器:瀏覽器自帶有這個組件,不過如果有更多的需求量,可以考慮增加。
其實,這個是三個組件庫的比對。
如果單獨從有沒有某種組件來判斷,其實element和iview的組件庫是非常類似的。而對於heyui,從我的開發初衷來看,我注重的主要是通用性,擴展性。從上面的比對上來看,heyui沒有很多的樣式組件,其實一開始參考了iview與element,開發了tag與panel。
事實發現,很少用到。因為每一個系統的設計師都擁有不同的想法。相反,我開發了Extend 樣式擴展,這個主要是從經驗上總結出來的,適用性很廣。還開發了DropdownCustom 下拉控制項,這些對於擴展性上面來說更好。組件調用
其實element與iview之間的組件調用,大致相似。
主要在一些細節功能上,有一些差別。組件命名方式
element用的是 短橫線分隔式命名,例:h-table
iview和heyui用的是 駝峰式命名,例:Table這一點上面,iview與heyui比較有優勢,代碼可讀性上面優勢更大一些。
組件的功能性
element在組件的功能性上面整體佔優勢。
大多數組件提供的功能都比較多。就以table組件來說,參數是兩頁屏幕都看不完,iview比heyui更多。但是像tree或者autocomplete,heyui的實現更底層,更易擴展,比element和iview複雜的多。數據驅動
其實這個單獨拿出來說,我是有私心的,誰讓我是heyui的作者。
接下來展示的是heyui的最大的一個特色。 那就是全局配置,以及數據驅動。我們以最簡單的Select組件為例子。
Element的調用方式
<template> <el-select v-model="value" placeholder="請選擇"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select></template><script> export default { data() { return { options: [{ value: 選項1, label: 黃金糕 }, { value: 選項2, label: 雙皮奶 }, { value: 選項3, label: 蚵仔煎 }, { value: 選項4, label: 龍鬚面 }, { value: 選項5, label: 北京烤鴨 }], value: } } }</script>
iView的調用方式
<template> <el-select v-model="value" placeholder="請選擇"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select></template><script> export default { data() { return { options: [{ value: 選項1, label: 黃金糕 }, { value: 選項2, label: 雙皮奶 }, { value: 選項3, label: 蚵仔煎 }, { value: 選項4, label: 龍鬚面 }, { value: 選項5, label: 北京烤鴨 }], value: } } }</script>
HeyUI的調用方式
<template> <div v-padding="40"> <Radio v-model="value" :datas="options"></Radio> <div v-height="20"></div> <Select v-model="value" :datas="options" placeholder="請選擇"></Select> <div v-height="20"></div> <Tabs v-model="value" :datas="options"></Tabs> </div></template><script>export default { data() { return { options: [ { key: "a", title: "黃金糕" }, { key: "b", title: "雙皮奶" }, { key: "c", title: "蚵仔煎" }, { key: "d", title: "龍鬚面" }, { key: "e", title: "北京烤鴨" } ], value: "a" }; }};</script>
實際效果
代碼鏈接:https://codesandbox.io/s/rj8p577n4p,點擊demo1的按鈕
這裡就只是簡單的說明,後期我會著重在這一個功能上面寫一篇文章。
項目大小與依賴
這裡,其實我還是比較在意的,畢竟項目的大小和依賴還是比較重要的。
項目大小
哈哈,感覺HeyUI有一點完勝的感覺。
這裡我也比較客觀的說一下,Element的JS大小的確比較大,主要是因為發布的時間比較長,逐步增加的功能比較多,你去看看Table的組件就可以理解。
然後iView的CSS一開始是直接用的Ant Design的,其實Ant Design的設計相對來說更華麗一些,所以CSS相對來說比較大一些,不過後期iView做了大量的改版,已經和Ant Design區別很大了,就是CSS的大小依舊沒有降下來。
而HeyUI的所有組件都是自己寫的,相對DOM的結構都比較簡潔一些。
而我的設計想法比較多的是交互機制,比較在意一些核心的問題,相對來說,功能我不會做的大而全,另外,使用的用戶也可以更方便擴展。項目依賴
其實項目依賴上面,heyui,可以說是沒有。
hey-log: console.log -> log 一個自己家的小工具
hey-utils: 自己家的公用方法
manba: 自己寫的日期工具
而element與iview,其實主要的是依賴async-validator
與deepmerge
,還有popper.js
。
deepmerge
我自己寫的hey-utils
裡面也有啦。async-validator
,其實我自己寫了hey-validator。因為前期改動比較大,就沒有單獨出來,後面已經把代碼獨立出來了。
不過heyui
還是直接用的源碼。就像前面說的,我一定是得了只能用自己寫的代碼的病!!!(堅強)
使用率
提交次數
從時間的緯度上來說,其實提交的頻率Element相對來說更多一些。
這也是因為Element團隊人員人數較多的原因。
star數
其實關於star數,我就不對比了,十萬點傷害。
很多的star也意味著更多的使用者,更多的測試者,相對來說,bug數量也少許多。
不過,heyui也在諸多線上的系統運行,也運行了快一年了,相對來說,bug數量也屈指可數。
issues數
歡迎大家使用heyui(諂媚微笑)。
使用率總結
這裡我就不放npm下載量的一些對比了。
其實Element不管是star數量或者是issues的數量都是嗷嗷領先,但是這並不代表Element更具備優勢,其實我自己在寫vue組件庫,這兩個組件庫我還是比較清楚的。
相對來說,star數量對於我來說就沒有很大的參考量了,畢竟iView的推廣也非常的好。
大家看看就好,我眼饞一下就好,主要還是上面的一些對比。最終總結
感覺這一篇文章應該沒有很多人看,大概是做給我自己看的。
heyui與element和iview相比,並沒有很差,有很多很多亮眼的功能,希望大家給heyui多一些展示的機會,多一些嘗試的機會。推薦閱讀: