# npm 包发布规范
# 版本描述
版本发布需要遵循 semver 规范。
发布的版本号一般为 Major.Minor.Patch(主版本号.次版本号.修订号)
:
Major
: 当你做了不兼容的 API 修改(等待通知,统一升级)
Minor
: 当你做了向下兼容的问题修正或功能性新增(HUI-Pro 统一升级,基本半个月升级一次)
Patch
: 当你做了向下兼容的问题修正或功能性新增(控件自己维护)
# 版本发布规范
这里的版本管理我们分为 lerna 总体版本和 npm 包独立版本,总体版本采用 lerna publish
进行总体发布,此时会强行将各个 npm 包版本保持到和 lerna 发布的版本同步(因此 lerna 是进行统一 npm 包版本管理)。
npm 包独立版本由各个控件的开发人员自行维护,通过 npm publish
自行发布 Patch
版本(不允许发布 Minor
和 Major
版本)。
# 单个 npm 包版本(Patch 版本)
- 新增控件(npm 包)的起始版本需要和 lerna 版本保持一致(我们不建议将不稳定的
0.x.y
版本的控件放入 @hui-pro)。 - 单个 npm 包的
Minor
版本在任何时刻和 lerna 发布的Minor
版本保持一致。 - 单个 npm 包可以快速发布
Patch
版本,以保证快速修复问题(通过npm publish
独立发布当前 npm 包的修订号)。 - 单个 npm 包有新功能应该等待 lerna 发布新的
Minor
版本时进行合并,当然如果这个新功能比较急切使用,也是可以快速发布Patch
版本。 - 单个 npm 包不允许有非兼容性更新(除非 lerna 升级
Major
版本)。 - 多个 npm 包之间互相引用必须是同一个
Minor
和Major
版本,以此来保证相互之间的兼容性。 - 单个 npm 包发布
Patch
版本的频率各自开发者视情况而定。 - 单个 npm 包发布需要跑通单元测试。
# lerna 总体版本(Minor 版本)
- lerna 总体版本在
lerna.json
的version
字段说明。 - lerna 发布版本不能是
Patch
版本变动。 - lerna 的
Minor
版本变动半个月1次。 - lerna 正式发布版本的起始主版本号为 1(
1.x.y
)。 - lerna 发布版本的同时会对项目进行打 tag,tag 和 lerna 版本保持一致。
- lerna 在整体框架有调整的情况下(例如变迁 VUE3 等)需要发布
Major
版本。 - lerna 发布版本前需要跑通所有的 npm 包的单元测试。
通过
lerna publish
发布所有 npm 包的统一版本号,使所有 npm 包统一提升Minor
版本或Major
版本,通过 lerna 发布版本的同时会对 @hui-pro 整体进行打 tag。
# Patch 版本发布流程
# 1、指定需要发布的仓库地址
npm config set registry http://af.hikvision.com.cn/artifactory/api/npm/npm-isms/
# 2、登录仓库账号
npm login
Username: npm-isms
Password: npm-isms
Email: (this IS public) zhuxiankang@hikvision.com.cn(这里填写自己的email)
# 3、修改需要发布的版本号
进入自己的包目录
cd .\packages\
cd .\test\
修改 package.json
中的 version
字段
package.json
{
...
"version": "1.0.1", // 从 1.0.0 改为 1.0.1
...
}
# 4、发布版本
npm publish
注意发布的时候在自己的包目录下执行,不要使用 npm run publish,也不要使用 lerna publish,就是纯粹的命令
npm publish
。
# 5、查看自己发布的版本
通过仓库网址查看
http://10.1.67.25:8081/artifactory/webapp/#/artifacts/browse/tree/General/npm-isms/@hui-pro
通过命令查看
npm view @hui-pro/test(这里是你自己发布的包名)
# 6、git cz 提交
这里仅提交 package.json
文件,业务代码和版本发布分开提交,scope 选 ci
。
? Select the type of change that you're committing: ci: 发布控件版本
? Denote the SCOPE of this change (optional): test
? Write a SHORT, IMPERATIVE tense description of the change:
test 发布版本 1.0.1
事实上发布版本要打 tag,但是 HUI_PRO 的决策是在 lerna publish 发布总体版本的时候打 tag。但是还是不要忘记提交说明,不然找不到各自 npm 包发布版本的快照。
# 7、验证
npm install
安装并在业务层验证发布的包是否无误
# Minor 版本发布流程
写给自己看的版本发布流程,其他开发人员不需要关心
- 修改
package.json
版本号为最新版本号。 - 执行
npm run changelog
自动生成版本日志,将最新的日志添加到docs/zh/guide/changelog.md
文件顶部。 - 执行
npm run build:copyFiles
拷贝英文文档。 - 执行
npm run build
对需要的控件进行打包,提交代码。 - 提交代码,保证本地无修改记录。
- 执行
npm run publish
发布版本。 - 发布完成后,代码合并到
master
。