# npm 包发布规范

# 版本描述

版本发布需要遵循 semver 规范。

发布的版本号一般为 Major.Minor.Patch(主版本号.次版本号.修订号):

Major: 当你做了不兼容的 API 修改(等待通知,统一升级)

Minor: 当你做了向下兼容的问题修正或功能性新增(HUI-Pro 统一升级,基本半个月升级一次)

Patch: 当你做了向下兼容的问题修正或功能性新增(控件自己维护)

# 版本发布规范

这里的版本管理我们分为 lerna 总体版本和 npm 包独立版本,总体版本采用 lerna publish 进行总体发布,此时会强行将各个 npm 包版本保持到和 lerna 发布的版本同步(因此 lerna 是进行统一 npm 包版本管理)。

npm 包独立版本由各个控件的开发人员自行维护,通过 npm publish 自行发布 Patch 版本(不允许发布 MinorMajor 版本)。

# 单个 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 包之间互相引用必须是同一个 MinorMajor 版本,以此来保证相互之间的兼容性。
  • 单个 npm 包发布 Patch 版本的频率各自开发者视情况而定。
  • 单个 npm 包发布需要跑通单元测试。

# lerna 总体版本(Minor 版本)

  • lerna 总体版本在 lerna.jsonversion 字段说明。
  • 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 版本发布流程

写给自己看的版本发布流程,其他开发人员不需要关心

  1. 修改 package.json 版本号为最新版本号。
  2. 执行 npm run changelog 自动生成版本日志,将最新的日志添加到 docs/zh/guide/changelog.md 文件顶部。
  3. 执行 npm run build:copyFiles 拷贝英文文档。
  4. 执行 npm run build 对需要的控件进行打包,提交代码。
  5. 提交代码,保证本地无修改记录。
  6. 执行 npm run publish 发布版本。
  7. 发布完成后,代码合并到 master