我知道大多数项目都有bower.json中为很多库定义的最低版本。
我不明白的是,如果某些内容更新并且有更改或错误,那么这会对您的应用程序产生影响而不知情吗?这背后的设计思想是什么?
谢谢!
答案 0 :(得分:0)
我们刚刚面对我正在进行的项目的确切问题,解决方案是将我们的bower.json文件更改为目标固定版本。
具体来说,我们的目标是angularjs ^ 1.4.8。在AngularJS v1.6中,
$ location现在使用'!'作为hash-bang URL的默认哈希前缀, 而不是空字符串
为了更好或更坏(主要是为了更糟),我们在不同的应用程序中有一些硬编码的URL,指向这个项目,一旦bower自动安装AngularJS 1.6作为我们的自动构建过程的一部分就打破了。
解决方案是简单地锁定我们的版本,而不是依赖于最新的错误修复(即带有〜的版本号前缀)或次要构建(即使用^前缀版本号)。
我认为像bower和npm这样的包管理器默认使用动态版本的原因是它们依赖于语义版本控制,理论上你应该只在主要版本号发生变化时遇到重大变化。 Semver使用主要的,次要的bugfix模式。当bugfix值递增时,它表示已解决了一个或多个向后兼容的错误。当次要版本递增时,表示已添加新的向后兼容功能。当主要版本增加时,它表示已经引入了新的重大变化。
问题在于,首先,它依赖于包开发人员在更改其包时尊重semver规则,其次,即使尊重semver,它仍然会导致问题(如示例I中所示)如上所述。