- 更新
package.json(package-lock.json)
。 - 根据 commit 纪录,生成
CHANGELOG.md
。 - commit 提交
package.json(package-lock.json)
和CHANGELOG.md
文件。 - git tag 打标签。
- Pushes 到 git remote 例如:
git push --follow-tags origin master
。 - Publish 到 npm。
上面的过程如果全部手动的话:
- npm version;
- 需要配置一大堆的东西才能生成;
- 手动 git commit 提交本地更新;
- 手动 git tag 打上 tag
- 手动 push 到远程库
- 手动发布到 npm
上面的动作可简化为:
- version
- CHANGELOG
- commit
- tag
- push
- publish
这六个动作基本上完全都应该自动化。
最简单的就是 standard-version。
一般结合 monorepo 使用,这时候在更新 package 的时候就不能局限在 root 目录了,就必须要递归更新。
standard-version 当然也可以使用,但是需要配置 .versionrc
文件指定,例如:
{
"bumpFiles": [
{
"filename": "packages/basic/package.json",
"type": "json"
},
{
"filename": "packages/all/package.json",
"type": "json"
},
{
"filename": "packages/vue/package.json",
"type": "json"
},
{
"filename": "packages/react/package.json",
"type": "json"
},
{
"filename": "package.json",
"type": "json"
}
]
}
monorepo 有更好的解决方案。
一句命令就解决了:
lerna publish --conventional-commits
上面的命令是个复合命令,真实的执行情况是这样的:lerna version --conventional-commits && lerna publish
。
lerna version 和 lerna publish 的使用。
pnpm 现在应该是最流行的了,递归发布可以通过 pnpm -r publish
实现,难得就是没有支持 version、CHANGELOG、commit、tag、push
步骤,需要 bumpp 来实现:
"release": "bumpp package.json packages/*/package.json --commit --push --tag && pnpm -r publish --access public",