为什么不在bower.json中修复版本

为什么不在bower.json中修复版本,bower,frontend,package-managers,Bower,Frontend,Package Managers,我知道大多数项目都在bower.json中为许多库定义了最低版本 我不明白的是,如果某个东西更新并出现中断更改或错误,那么在您不知情的情况下会影响您的应用程序,这会有风险吗?这背后的设计思想是什么 谢谢 在我参与的一个项目中,我们刚刚遇到了这个问题,解决方案是将我们的bower.json文件更改为目标固定版本 具体来说,我们的目标是angularjs^1.4.8。在AngularJS v1.6中 $location现在使用“!”作为散列URL的默认散列前缀, 而不是空字符串 不管是好是坏(主要是

我知道大多数项目都在bower.json中为许多库定义了最低版本

我不明白的是,如果某个东西更新并出现中断更改或错误,那么在您不知情的情况下会影响您的应用程序,这会有风险吗?这背后的设计思想是什么


谢谢

在我参与的一个项目中,我们刚刚遇到了这个问题,解决方案是将我们的bower.json文件更改为目标固定版本

具体来说,我们的目标是angularjs^1.4.8。在AngularJS v1.6中

$location现在使用“!”作为散列URL的默认散列前缀, 而不是空字符串

不管是好是坏(主要是坏),我们在一个不同的应用程序中有一些硬编码的URL,指向这个项目,一旦bower自动安装AngularJS 1.6作为我们自动构建过程的一部分,这个项目就崩溃了

解决方案是简单地锁定我们的版本,而不是依赖最新的bug修复(即使用~)或小版本(即使用^作为版本号的前缀)

我认为像bower和npm这样的包管理器默认使用动态版本的原因是,它们依赖于语义版本控制,理论上,只有在主要版本号更改时,您才会遇到突破性的更改。Semver使用一个主要、次要的错误修复模式。当bugfix值增加时,表示一个或多个向后兼容的Bug已被解决。当次要版本增加时,表示已添加新的向后兼容功能。当主版本增加时,表示引入了新的、突破性的更改


问题在于,首先,它依赖于软件包开发人员在对其软件包进行更改时遵守semver规则,其次,即使遵守semver规则,它仍可能导致问题(如我上面提供的示例所示)。

我们刚刚在我参与的一个项目中遇到了这个问题,解决方案是将bower.json文件更改为目标固定版本

具体来说,我们的目标是angularjs^1.4.8。在AngularJS v1.6中

$location现在使用“!”作为散列URL的默认散列前缀, 而不是空字符串

不管是好是坏(主要是坏),我们在一个不同的应用程序中有一些硬编码的URL,指向这个项目,一旦bower自动安装AngularJS 1.6作为我们自动构建过程的一部分,这个项目就崩溃了

解决方案是简单地锁定我们的版本,而不是依赖最新的bug修复(即使用~)或小版本(即使用^作为版本号的前缀)

我认为像bower和npm这样的包管理器默认使用动态版本的原因是,它们依赖于语义版本控制,理论上,只有在主要版本号更改时,您才会遇到突破性的更改。Semver使用一个主要、次要的错误修复模式。当bugfix值增加时,表示一个或多个向后兼容的Bug已被解决。当次要版本增加时,表示已添加新的向后兼容功能。当主版本增加时,表示引入了新的、突破性的更改


这样做的问题是,首先,它依赖于软件包开发人员在对其软件包进行更改时遵守semver规则,其次,即使遵守semver规则,它仍可能导致问题(如我上面提供的示例所示)。

我同意,我面临完全相同的问题,并考虑修复版本。但是现有的项目已经有很多动态版本了,我想知道他们最初为什么这么做,以及从中得到了什么设计好处。@zhankezk,抱歉,我意识到我并没有真正回答你的问题。我用更多的信息更新了我的答案。我同意,我面临着完全相同的问题,并考虑修复版本。但是现有的项目已经有很多动态版本了,我想知道他们最初为什么这么做,以及从中得到了什么设计好处。@zhankezk,抱歉,我意识到我并没有真正回答你的问题。我用更多的信息更新了我的答案。