项目结构目录
├─build // 构建相关的脚本和配置├─examples // 用于展示Element组件的demo├─lib // 构建后生成的文件,发布到npm包├─packages // 组件代码├─src // 引入组件的入口文件├─test // 测试代码├─Makefile // 构建文件├─components.json // 组件列表,显示每个组件的入口和名称└─package.json
package.json作用
查看一个项目,最开始应该从package.json文件入手,该文件包含了入口文件main、脚本scripts、版本version等信息。
main项目入口文件
在使用element-ui时,import Element from ‘element-ui’ 就是从入口文件进行导入。
而element-ui的入口文件
"main": "lib/element-ui.common.js"
lib/element-ui.common.js是 commonjs规范,也就是node中使用的规范
另外lib/index.js是umd规范。
files指定发布包的文件
把一个包发布到npmjs中,不能把所有的源代码都进行发布,否则下载包时会非常大非常耗时。
element-ui指定了files的内容,可以查看npm i element-ui 下载的包,只包含了这些目录。
"files": ["lib","src","packages","types"],
typings
unpkg
把包发布到npm,同时应该可以在unpkg中获取,这样代码就能在node环境和浏览器环境中运行。
因此发布一个包时,umd打包是必须的。由webpack.conf.js生成,lib/index.js就是umd规范。
style
scripts执行不同功能的脚本
components.json文件
记录了组件名和组件的路径,在自动化生成文件以及入口时会使用。
"pagination": "./packages/pagination/index.js","dialog": "./packages/dialog/index.js","autocomplete": "./packages/autocomplete/index.js",// ..."avatar": "./packages/avatar/index.js","drawer": "./packages/drawer/index.js","popconfirm": "./packages/popconfirm/index.js"}
packages存放组件目录
存放着组件库的源码和组件样式文件。
packages文件夹是分开去处理每个组件。
以alert和row为例进行查看。alert组件使用了template模板语法,row使用了render语法。
alert组件
目录结构
index.js入口文件进行组件的注册。
import Alert from './src/main';/* istanbul ignore next */Alert.install = function(Vue) {Vue.component(Alert.name, Alert);};export default Alert;
引入组件,并提供了install方法,让Vue实例可以通过Vue.use(Alert);进行单组件引入
关于install可以看官方文档
row组件

可以看出来src/row.js使用的js文件,不是用vue结尾。该组件的语法和Alert有些不同,但是Alert的template写法最终还是会被编译为render结构。
查看下row.js文件
export default {name: 'ElRow',componentName: 'ElRow',// ....render(h) {return h(this.tag, {class: ['el-row',this.justify !== 'start' ? `is-justify-${this.justify}` : '',this.align ? `is-align-${this.align}` : '',{ 'el-row--flex': this.type === 'flex' }],style: this.style}, this.$slots.default);}};
packages/theme-chalk

存放所有组件的相关样式,src存放的是scss文件,lib是css文件。
index.scss是全局引入库时使用的入口,其它每个scss文件对应按需引入组件时使用的文件。
src
该目标把所有组件做了一个统一处理,包含自定义指令、项目整体入口、组件国际化、组件 mixins、动画的封装和公共方法。
