遵守约定进行开发。约定主要包括以下:
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 等代码请勿滥抽,确定复用性
- 相同职责、模块的代码在一个目录结构中,减少代码跳跃
- 尽可能清晰的代码,模块化的代码,都是为了一定程度的复用,多考虑代码的维护性、可测性
- 注释完善,请勿信奉“代码即注释”,大型项目,函数命名尤其有难度,起有注释作用的命名,几乎不可能