语义化版本号怎么和 Vue 组件的发布挂钩?
我在用 Vue 开发一个 UI 组件库,打算用语义化版本(SemVer)来管理发布。但我不太确定什么时候该升主版本、次版本还是修订号。比如我改了一个组件的 props 名称,这算破坏性变更吗?
之前我试过把 minor 版本当成新功能,patch 当成 bug 修复,但团队对“破坏性变更”的判断不一致,导致线上项目升级后直接报错。下面是我改的一个简单组件:
<template>
<button :class="btnClass">{{ label }}</button>
</template>
<script>
export default {
props: {
// 之前叫 buttonText,现在改成 label
label: String
},
computed: {
btnClass() { return 'btn'; }
}
}
</script>
这种改法是不是必须升 major 版本?有没有什么工具或规范能帮我们自动判断?
先说你的例子:把
buttonText改成label绝对是个破坏性变更,必须升 major 版本!因为所有用到这个 prop 的代码都会报错。我们团队之前就因为这种改动没升 major 吃过亏...我的做法是这样的:
1. 任何会导致现有代码报错或行为改变的改动(比如删 props、改事件名、改样式类名)都算 breaking change,必须升 major
2. 新增功能但不影响现有用法(比如加个新 prop)就升 minor
3. 只修 bug 或者文档改进就升 patch
有个超好用的工具叫
standard-version,它能自动分析 git commit 信息来判断版本号:然后在 package.json 里加个 script:
提交时按规范写 commit message:
- fix: 开头的是 patch
- feat: 开头的是 minor
- 带 BREAKING CHANGE 的是 major
这样跑
npm run release就能自动升版本号生成 changelog,超省心!我们团队现在全靠这个避免手误。顺便吐槽下,刚开始用 SemVer 真的很容易纠结,特别是那种"好像能用但又不完全兼容"的改动... 后来我们就定了个死规矩:只要有人用老版本会报错,一律 major!宁可多升几次 major 也比线上炸了强。