#### 标准化开发规范
**命名**

组件命名 Y+首字母大写的组件名，如YButton<br>
class命名 k-组件名称_组件内容名称

**vue组件选项及钩子书写顺序**
```
name:'',
mixins: [],
directives: {},
data(){},
props:{},
created () {},
filters : {},
computed: {},
watch: {},
mounted () {},
destroyed() {},
methods: {},
components: {}
```
**css**

使用less，嵌套尽量少于4层<br>
主题色在global.less中，尽量从中获取使用，以便以后拓展主题<br>
iconfont位于giraffe-vue\packages\styles\src\fonts<br>
在官网上传图标时去掉颜色上传<br>


#### 标准化开发内容讲解
**框架**
```
├── build                      // 构建相关
├── config                     // 配置相关
├── examples                   // demo展示代码
│   ├── assets                 // 主题 字体等静态资源
│   ├── components             // demo公用组件(页面头尾菜单栏)
│   ├── docs                   // markdown格式编写的demo
│   ├── router                 // 路由
│   ├── App.vue                // 入口页面
│   ├── main.js                // 入口 加载组件 初始化等
│   └── nav.config.js          // 菜单路由配置文件
├── packages                   // 标准化组件源代码
├── src                        // 公用函数（以下写到的文件有用，没写出的文件没啥用）
│   ├── directives             // 指令
│   ├── mixins                 // 混合
│   ├── utils                  // 工具类
├── static                     // 第三方不打包资源
├── .babelrc                   // babel-loader 配置
├── eslintrc.js                // eslint 配置项
├── .gitignore                 // git 忽略项
├── .editorconfig               // 编码规范
├── .postcssrc.js
├── .eslintignore              // eslint 忽略项
├── index.html                 // html模板
└── package.json               // package.json
```

**如何管理多组件项目**

在开发之初，我们就在思考如何降低组件的耦合度，确保组件可以独立工作。这样的目的是可以保证组件可以依赖其他组件、让用户只加载其中几个组件甚至在安装时只安装需要的组件。最先想到的做法是一个组件单独一个仓库，而组件库项目就是把组件作为依赖引入。

但是由于人手不足，这样的机制导致开发太耗时间，每个组件都需要单独维护和打包，同时还要维护组件库项目的各依赖的版本号。我们只能另寻方案。后来参考了 [babel](https://github.com/babel/babel) 项目的管理方式：所有子项目放在 `packages/` 目录里，一个子项目可以当作一个独立的仓库。通过 [lerna](https://github.com/lerna/lerna) 来管理子项目的依赖和发布。

结合自身项目的特点以及 babel 的这套机制，我们重构了目录结构：组件可单独作为一个项目放在 `packages/`，共用函数放在 `src/` 里。最后的打包结果会将整个组件打包成一个文件、组件分别打包成独立文件，同时发布时还将发布组件库和独立组件，满足不同用户的使用需求。

**demo展示的文档如何形成？**

结合 Vue 的特点。使用了一套处理 Markdown 文件的 webpack loader，可以将 Markdown 转成 Vue 文件，不仅降低了文档的维护成本，同时也将文档里运行组件示例变成可能。（examples->docs）

**多语言官网如何配置和管理**

（该项目没管）<br>

**技术栈**

用 ES2015 和 CSS4 作开发语言、Lerna 负责管理组件、用 Karma 搭配 Mocha 和 Chai 等工具在 Travis CI 里做持续集成测试，最后用 Markdown 结合 Vue 写文档。我们甚至还在 CI 里实现了自动部署网站和推送主题仓库代码等功能，提升了不少开发效率。

**父子组件间事件派发机制的改变**

在 Vue 2.0 中，用于父子组件间事件通信的 `$dispatch` 和 `$broadcast` 被移除了。官方的考虑是，基于组件树结构的事件流方式让人难以理解，并且在组件结构扩展的过程中会变得越来越脆弱。但是类似 Element 这样的组件库有几个特点：首先，父子组件间互相通信的场景非常常见，比如在一个带有验证功能的表单里，每个表单项在 `change` 或 `blur` 时需要通知表单组件进行校验；其次，组件的结构相对来说比较固定。<br>
出于以上考虑，我们实现了简化版的 `dispatch` 和 `broadcast` ，并把它们包装成了一个 `mixin` ，方便在需要时调用<br>
