mint-ui 源碼學習一 —— 項目整體分析

本文主要介紹 mint-ui 的目錄結(jié)構(gòu)典蝌、所有的技術(shù)棧以及組件庫的搭建知識容诬。

mint-ui 項目整體學習

項目目錄

看圖說話~

  • .github 目錄用于規(guī)范一些 github 行為蜗字,其中存的都是些 md 文件形庭。
  • build 目錄用于構(gòu)建組件庫項目奄侠。其中使用了餓了么的 cooking 工具進行構(gòu)建瞬内。
  • example 目錄中是演示項目迷雪,用來演示組件庫的使用。許多在官方文檔中沒有寫全的東西都可以在這個目錄下看到虫蝶。這個演示項目的線上地址請看這里
  • lib 目錄中是構(gòu)建完成的打包 js 和 css 文件章咧,這就是我們最終引用組件庫的時候用到的文件。
  • node_modules 請忽略……
  • packages 目錄下存放了組件庫中的所有組件能真。在編譯構(gòu)建的時候入口文件會去 packages 目錄下拿到所有組件赁严。像這樣import Button from '../packages/button';扰柠。
  • src 目錄下是組件庫的一些通用代碼了,也是入口文件所在疼约。

組件庫如何應(yīng)用到 Vue 項目中卤档?

組件庫的安裝其實就是使用了 Vue 的插件定義和使用的方式〕贪可以看下 mint-ui 定義的插件公開方法 install

import Button from '../packages/button';
import Toast from '../packages/toast';
import Indicator from '../packages/indicator';
import MessageBox from '../packages/message-box';
import InfiniteScroll from '../packages/infinite-scroll';
import '../src/assets/font/iconfont.css'; // 字體樣式

const version = '2.2.13';
const install = function(Vue, config = {}) {
  // 避免重復(fù)安裝
  if (install.installed) return;
  // 注冊組件
  Vue.component(Button.name, Button);
  // 使用插件
  Vue.use(InfiniteScroll);
  // 添加實例方法
  Vue.$messagebox = Vue.prototype.$messagebox = MessageBox;
  Vue.$toast = Vue.prototype.$toast = Toast;
  Vue.$indicator = Vue.prototype.$indicator = Indicator;
};

組件庫的 install 方法一般就 3 種行為:

  1. 全局注冊組件庫
  2. 使用插件方法
  3. 添加全局實例方法

這也就是我們組件庫中常用的功能了劝枣。

想看懂 mint-ui 源碼需要知道什么技術(shù)棧?

  • JS 語法使用了 vue.js 框架(這想必大家都知道)织鲸。
  • 在 css 樣式上使用的是 postcss-salad舔腾。它類似于 sass,常用的功能就是將一些類名進行包裝了搂擦,如 @when plain 其實就是 .is-plain 選擇器稳诚。

我在看組件庫的時候在找 postcss-salad 上花了點時間。

如何搭建類似 mint-ui 的組件庫瀑踢?

其實市面上完善的通用組件庫已有不少扳还,像 Vue 方面的有 ElementUIVant橱夭、 MintUIiView氨距, Antd 好像也出了 Vue 版本。所以徘钥,個人感覺重復(fù)造輪子無意義衔蹲,但是以學習的態(tài)度去將一些常用到的業(yè)務(wù)組件抽離出來做一個組件庫也是極好的提高生產(chǎn)效率的方式。
說說我搭建的個人組件庫的過程:

  • 使用 vue-cli 搭建一個項目呈础。
  • 參考主流組件庫的目錄結(jié)構(gòu)搭建項目。其中比較好的全局方法完全可以挪用橱健。
  • 寫組件而钞,寫什么組件看自己需求。那些主流組件庫的很多東西是很有借鑒和學習意義的拘荡。
  • 寫完組件庫之后使用 vue-cli 項目的構(gòu)建命令構(gòu)建出打包文件臼节。
  • 最后配置 package.json 然后上傳 npm(也可以不傳 npm 直接 git 就可以導(dǎo)出項目),就這樣大功告成珊皿。

mint-ui 的 src 目錄下都有些什么网缝,干啥用的?

  • assets 目錄下是資源文件蟋定,存放了字體文件和加載中的 svg 圖片粉臊。
  • mixins 目錄下就一個 emitter.js 文件,作用是定義了父子組件間向上和向下的通信(之前 Vue 也有這個功能驶兜,后來取消了)扼仲。
  • style 目錄下是一些全局的樣式远寸,其中 var.css 定義了全局的皮膚⊥佬祝可以實現(xiàn)快速換膚的功能驰后。注: mint-ui 中所有的 css 都是用了 salad 來預(yù)編譯,所以樣式文件看著都怪怪的矗愧,像 sass 又不是 sass灶芝。
  • utils 目錄中是一些通用的工具方法代碼,這里面的工具很有參考價值唉韭,可以拿來使用夜涕。具體看看有啥:
    • popup 目錄中是懸浮框的業(yè)務(wù)邏輯。
    • clickoutside.js 中定義了點擊元素外觸發(fā)的事件
    • dom.js 中處理一些與 dom 相關(guān)的方法纽哥。主要處理 dom 事件钠乏、dom 元素上的 class 和 style 的處理。
    • merge.js 方法用于將多個對象合并給目標對象并返回目標對象春塌。
  • index.js 方法是組件庫的入口文件晓避,主要功能上面提到過了。主要做了幾步:導(dǎo)入組件庫所有組件和插件只壳;使用 Vue 的插件定義方法將組件庫變?yōu)?Vue 插件俏拱;在插件中注冊組件、使用插件并添加實例方法吼句;最后導(dǎo)出插件方法以及所有的單個組件锅必。

相對于 element-ui 的 utils 目錄,mint-ui 的 utils 目錄真的是非常少的惕艳。不過其中的方法還是值得借鑒和學習的搞隐。

最后

文章內(nèi)容較少,只是先起個頭~
這個整體分析沒太多講的远搪,大致了解下劣纲,也是自己整理下思路。為接下來一系列的文章做熱身谁鳍。
Vue 實驗室之前有分析過一些 Element 的簡單組件庫癞季,之后的 mint-ui 組件學習只會對博主感興趣的、比較有意思的組件進行分析和學習倘潜。如有需求也可以評論留言哦绷柒。
其實能擁有一個私人組件庫還是一件非常酷的事情啦讓我們一起擼一個個人組件庫

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涮因,一起剝皮案震驚了整個濱河市废睦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蕊退,老刑警劉巖郊楣,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憔恳,死亡現(xiàn)場離奇詭異,居然都是意外死亡净蚤,警方通過查閱死者的電腦和手機钥组,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來今瀑,“玉大人程梦,你說我怎么就攤上這事¢佘” “怎么了屿附?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長哥童。 經(jīng)常有香客問我挺份,道長,這世上最難降的妖魔是什么贮懈? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任匀泊,我火速辦了婚禮,結(jié)果婚禮上朵你,老公的妹妹穿的比我還像新娘各聘。我一直安慰自己,他們只是感情好抡医,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布躲因。 她就那樣靜靜地躺著,像睡著了一般忌傻。 火紅的嫁衣襯著肌膚如雪大脉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天水孩,我揣著相機與錄音箱靴,去河邊找鬼。 笑死荷愕,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的棍矛。 我是一名探鬼主播安疗,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼够委!你這毒婦竟也來了荐类?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤茁帽,失蹤者是張志新(化名)和其女友劉穎玉罐,沒想到半個月后屈嗤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡吊输,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年饶号,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片季蚂。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡茫船,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扭屁,到底是詐尸還是另有隱情算谈,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布料滥,位于F島的核電站然眼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏葵腹。R本人自食惡果不足惜高每,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望礁蔗。 院中可真熱鬧觉义,春花似錦、人聲如沸浴井。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磺浙。三九已至洪囤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撕氧,已是汗流浹背瘤缩。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留伦泥,地道東北人剥啤。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像不脯,于是被迫代替她去往敵國和親府怯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

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