遵守约定进行开发。约定主要包括以下:
1. package.json
- scripts
- clean
 - lint: lint-staged(tslint、prettier)
 - test
 - test-live
 - coverage
 - build
 - ci 专门用于 travis
 
 - build
- cjs
 - ems
 - umd(可选,只有 g2, g2-plot g 等上层包需要打 dist 文件)
 
 - main
- main
 - module
 - browser(可选,umd 需要)
 - types
 
 - husky 添加 pre-commit(lint、build、test)(请勿使用 git commit -n)
 - commit msg 请自己规范一下,暂时没有 lint 工具。例如: 
fix(axis): fix axis style,fix: fix axis style - 删除无用文件,如果不知道是干啥的就删除
 - ci 需要运行 lint test build
 
2. npm 包内容
仅保留:
- package.json
 - lib
 - esm
 - dist
 - LICENSE
 - README.md
 - CHANGELOG.md
 
可以使用 package.json 中 配置 files 的方式,请勿 npm publish 非上述文件或者目录。
3. 代码组织
- 代码目录 src
 - 单测目录 tests
 - 全部使用 typescript 语言,包括单测,注意类型定义,尽量少用 any
 - tslint & prettier 必须添加,且保持一致(参考 scale 写法)
 - package-lock.json 无需 git 提交
 - 每个目录都必须要有 index.ts 文件
 - 文件、目录命名采用 abc-def 形式
 - 常量使用全大写
 - 变量请勿大写开头
 - 私有成员在加 private 关键字的前提下
 - 方法之间换且换一行
 - 无用代码删除,而不是注释
 
4. 代码规范
按照目前 tslint 和 prettier 即可,后续会逐步添加不规范的写法。tslint 规则目前使用下面的规则默认:
- “tslint:recommended”
 - “tslint-config-prettier”
 
后续可按照需求添加和移除。
5. 协作流程
多人协作开发的流程。
- PR 合并时候,在 GitHub 上使用 “rebase and merge”,让 commit 记录干净一些(其他两个都会在 commit 增加一个 merge commit)
 

- 合并分支之后,删除原 pr 分支
 
发布规范
严格遵循 Semantic Versioning 2.0.0 语义化版本规范。
发布周期
• 修订版本号:每周都会进行日常 bugfix 更新,发布日定在周四。(如果有紧急的 bugfix,则任何时候都可发布)<br /> • 次版本号:每个迭代发布一个带有新特性的向下兼容的版本,发布时间有迭代时间决定。<br /> • 主版本号:含有破坏性更新和新特性,不在发布周期内。
发布流程
- 提交命名为 
release-${version}的 PR,该 PR 内容包括:- 更新日志
 - 更新版本号
 
 - 以上 PR 合入 master 后,运行 npm publish 发布 npm 包,同时使用链接中的工具发布对应的 CDN 连接
 - 分支切到 v4.0.x,merge master 代码,然后在 v4.0.x 分支上打 tag,tag 命名规范: 
v${version}以 ‘v’ 开头,如 v4.0.1 
$ git co master$ git pull origin master$ git co v4.0.x && git merge origin/master && git tag v4.0.1$ git push origin v4.0.1
- 编辑https://github.com/antvis/G2/releases 页面
 - 部署网站,如果有 API 的变动,需要重新更新 API 文档:
 
# 如果 API 有变动,更新 API 文档$ npm run doc# 部署网站$ npm run site:deploy
7. 其他
- 写更简洁的代码。能用 es6 的方法就不要用 es5 去拼接
 - common、util、helper 等代码请勿滥抽,确定复用性
 - 相同职责、模块的代码在一个目录结构中,减少代码跳跃
 - 尽可能清晰的代码,模块化的代码,都是为了一定程度的复用,多考虑代码的维护性、可测性
 - 注释完善,请勿信奉“代码即注释”,大型项目,函数命名尤其有难度,起有注释作用的命名,几乎不可能
 
