element-ui源码阅读-开篇

最近没那么忙,准备研究下element-ui源码,借签一下大神的组件设计思路,来提升下组件开发的能力,将其运用到工作中,提升组件的可复用性和可维护性。通过源码来vuecss组件设计等知识。首先从github上下载element-ui的源码,解压后目录如下所示:

// 源码开发包目录结构
element
    ├──.github                 // github的ISSUE等文件模板
    ├── build                  // webpack编译配置文件等
    ├── examples               // 官方主页项目包
    ├── lib                    // 打包后文件目录
    ├── node_modules           // 模块依赖目录
    ├── packages               // 组件的源码目录
        ├── alert              // 具体组件源码包
            ├── src            // Vue组件包
            ├── index.js       // 入口文件
    ├── src                    // 源码目录
        ├── directive          // 实现滚轮优化,鼠标点击优化
        ├── locale             // i18n国际化
        ├── mixins             // Vue混合器
        ├── transition         // 样式过渡效果
        ├── utils              // 工具类包
        ├── index.js           // 源码入口文件
    ├── test                   // 测试目录
        ├── unit               // 单元测试目录
            ├── coverage       // 单元测试覆盖率包
            ├── specs          // 测试用例源码包
            ├── index.js       // 测试入口
            ├── karma.conf.js  // karma配置文件
            ├── utils.js       // 工具类
    ├── types                  // typescript文件包
    ├── .babelrc               // babel配置文件
    ├── .eslintignore          // eslint配置忽略文件
    ├── .eslintrc              // eslint配置
    ├── .gitignore             // git忽略文件
    ├── .travis.yml            // 持续构建配置
    ├── package.json           // npm包核心文件
    ├── components.json        // 组件列表json
    ├── yarm.lock              // yram版本控制文件
    ├── package-lock.json      // npm包版本控制文件
    ├── postcss.config.js      // postcss配置文件

在阅读前端项目源码时,我有个习惯,首先看的就是package.json文件,在该文件中我一般主要关注入口文件,引用的第三方库,执行的脚本命令这三个点,然后再看代码。

1. package.json文件

1.1第三方库

这里主要介绍下dependencies下的源码,在开发的时候一般都会用到,element-ui主要引入了以下6个js库:

"async-validator": "~1.8.1",  #异步数据验证插件
    "babel-helper-vue-jsx-merge-props": "^2.0.0",  #jsx和vue合并插件
    "deepmerge": "^1.2.0",  #对象深度合并插件
    "normalize-wheel": "^1.0.1",  #浏览器滚轮兼容插件
    "resize-observer-polyfill": "^1.5.0",  #监听元素变化插件
    "throttle-debounce": "^1.0.1"  #节流去抖插件

下面主要介绍下src目录packages目录。

2.src

2.1. index.js

index.js文件为入口文件,其主要作用是将packages目录下的组件引入进来进行注册,然后再导出。主要步骤如下所示:

    1. 使用import引入所有组件。
  • 2.定义components数组,将引入的组件都添加到数据中。
  • 3.定义install函数,在函数中主要包括以下几个步骤
  • a.设置国际化
  • b.遍历components数组,对组件进行注册。
  • c.引用指令。
  • d.将loadingmsgboxalertconfirmpromptnotifymessage挂载到Vue上,这就是为什么我们可以在组件中可以直接通过this.$message等方式来调用的原因。
  • 4.使用export default导出,方便外部进行调用。

2.2.directives

directives文件夹下包括了鼠标滚动事件和重复点击事件两个指令。主要是用于优化这两个事件。

2.3.locale

locale文件夹主要跟国际化相关,存储一些国际化的文件,每一种语言一个配置文件。

2.4 mixins

mixins下包含一些常用的混合器。

2.5 transition

transition下包含一些样式过渡效果。

2.6 utils

utils下包含一些常用的工具方法。

3. packages目录

packages目录包括了所有的组件和主题样式theme-chalk

3.1 theme-chalk

该文件夹主要是包括了所有组件的样式信息,如果要创建不同的主题,只需修改该文件夹下面的样式就可以了。element-ui使用的是scss,其代码都是基于scss来编写的,比较容易读懂。具体的样式定义,样式规则将在后面单独写一批文章来总结。

3.2 组件

每一个组件目录基本都是包括一个main.vue文件和一个index.js文件。

3.2.1 main.vue

用于创建组件,包括模板代码、样式代码和js代码。

3.2.2 index.js

该文件主要是用于注册组件,方便使用vue.use来引入,基本都是如下所示的代码。

import Alert from './src/main';

/* istanbul ignore next */
Alert.install = function(Vue) {
  Vue.component(Alert.name, Alert);
};

export default Alert;

开篇主要介绍到这里了,后面将分析一些比较复杂点的组件。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容