^1.2.3 表示 ≥1.2.3 且

必须手动校验变更类型与版本号增量是否匹配,不能只靠工具自动生成。 工具(如 standard-version 或 npm version)只看提交前缀或命令参数,不理解代码实际影响——比如你改了 props 的必填逻辑但没加 breaking 标记,npm version minor 仍会升次版本,结果就是破坏兼容性却标称“向后兼容”。
怎么判断该升 major / minor / patch?
核心依据是「下游使用者代码是否需要修改」:
-
major:用户调用时必须改代码才能通过编译或运行,例如删函数、改函数签名、移除export、把stringprops 改成强制number -
minor:用户无需改代码,但可主动使用新功能,例如新增一个onDragEnd回调、加一个disabled属性 -
patch:用户完全无感知,纯内部修复,例如修正useDraggable在 Safari 下的拖拽偏移计算错误
特别注意:主版本为 0.x 的包(如 my-internal-utils:0.25.0),minor 升级也视为 breaking —— ^0.25.0 不会升到 0.26.0,不是因为工具限制,而是 SemVer 明确规定 0.x 阶段无兼容承诺。
为什么 composer.json 里写 "^1.2.3" 不等于“允许安全升级”?
它只表示「≥1.2.3 且 composer.lock 中记录的精确 commit hash 和版本号:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 如果
composer.lock里是"version": "1.2.3",composer install就只会装这个 - 但只要执行
composer update my/package,哪怕composer.json写的是^1.2.3,也可能拉到1.9.9—— 只要它在1.x范围内且 Packagist 上存在对应 tag - 确认真实可用版本:运行
composer show my/package --all,看输出的 tag 列表,别只信自己写的约束
Git tag 必须是轻量 tag、格式为 v1.2.3(带 v 前缀)、且已 git push origin v1.2.3,否则 Composer 根本找不到该版本。
发布前必须检查的三件事
缺一不可,漏掉任一项都可能导致下游项目构建失败或运行异常:
- CHANGELOG.md 是否按
Added/Changed/Deprecated/Removed/Fixed分类写清每一项变更,并标注是否 breaking - package.json 的
files字段是否只包含必要文件(如dist、types、README.md),避免把tests/或scripts/打包进去污染用户 node_modules - type definitions(如
index.d.ts)是否与 JS 实现同步更新,特别是新增 prop 后忘了加类型声明,TypeScript 用户立刻报错
最常被跳过的其实是最后一点:类型定义滞后于实现,而 composer update 或 npm publish 并不校验这点。你得手动跑 tsc --noEmit 或让 CI 过一遍类型检查。










