【发布时间】:2014-05-30 13:01:15
【问题描述】:
所以“myLibrary”引用了“anotherLibrary”。两个库都关注http://semver.org/
如果我发布了 myLibrary 的新版本,强制消费者更新到 anotherLibrary 的新主要版本,myLibrary 的主要版本是否也应该增加?
【问题讨论】:
标签: dependency-management semantic-versioning
所以“myLibrary”引用了“anotherLibrary”。两个库都关注http://semver.org/
如果我发布了 myLibrary 的新版本,强制消费者更新到 anotherLibrary 的新主要版本,myLibrary 的主要版本是否也应该增加?
【问题讨论】:
标签: dependency-management semantic-versioning
这在 semver 的 FAQ 部分有专门回答,建议不要升级主版本。 http://semver.org/#what-should-i-do-if-i-update-my-own-dependencies-without-changing-the-public-api
【讨论】:
除非该库完全嵌入您的库中,否则是的。
假设两个库都在1.0。用户可以像这样声明他们的依赖关系:
other ~> 1.0
yours ~> 1.0
其中~> 表示依赖于与1.0 兼容的任何版本,即1.x.y。
您的库声明:
other ~> 1.0
所以一切正常,依赖关系可以解决。如果other 移动到1.1.0,一切仍然有效。
现在,您的库切换到:
other ~> 2.0
...并将其发布为版本1.1.0。这与用户声明的依赖项不兼容。他们想要一个1.x 版本的other 和一个1.x 版本的yours,以前可以,但现在不行。因此,您必须将其发布为版本2.0。即使你的库没有暴露任何具有依赖库类型的符号,你也破坏了用户的依赖管理。
【讨论】:
other) 成为 API 的一部分。我认为这有时是合法的,但并不完全是 semver 的意义所在。我正在努力解决这个问题。
这真的取决于主库的公共 API 是否发生变化。我倾向于将图书馆视为一个黑匣子。我不需要知道它是如何实现的细节。因此,除非内部库以某种方式暴露出来,否则外部库的 API 不会改变。
所以,如果内部库根本没有公开,我会修改补丁号,仅此而已。如果内部库被公开,那么您必须确定该公开是否已发生足够的变化以保证主要版本的提升(不兼容或破坏性更改)。
当然,如果外部库的 API 已更改以支持内部库的升级,那么大版本升级是必要的。
【讨论】: