为什么我应该避免 'Gemfile' 文件中的 ~> 表达式

Why should I avoid the ~> expression in 'Gemfile' file

我正在 rails 上开设关于 ruby 的在线课程,每当他们向我们展示如何在安装前向 Gemfile 添加 gem 时,他们都会说“不要添加”数字版本前的 ~> 或 =< 符号。但是当我阅读这些 gem 的文档时,他们说要添加它,包括这个标志。

即bootstrap-sass gem

1. 根据文档:gem 'bootstrap-sass', '~> 4.3.3'

2. 根据网课:gem 'bootstrap-sass', '4.3.3'

这个标志是什么意思,我为什么要避免使用它?

这些符号是根据 bundler's documentation 的版本说明符:

Most of the version specifiers, like >= 1.0, are self-explanatory. The specifier ~> has a special meaning, best shown by example. ~> 2.0.3 is identical to >= 2.0.3 and < 2.1. ~> 2.1 is identical to >= 2.1 and < 3.0. ~> 2.2.beta will match prerelease versions like 2.2.beta.12.

我认为是指定版本号,以便根据http://semver.org进行非中断更新。带有a.b.c风格的版本号,一个地方的数字代表主要版本。对主要版本的更改可以包括非向后兼容的更改。 b 处的数字为次版本号。对次要版本的更改可以包括改进但没有向后不兼容的中断(理论上)。 c处的版本号代表补丁版本,用于修复bug和打补丁。因此,为了相信 gem 如果我们捆绑更新您不会破坏,最好使用 ~ 来指定 gem 版本。实际规则在上面的答案中,所以我不会在这里重复。但请记住,这不是硬性规定。可能有 gem 不严格遵循 semver 风格。因此,有些人通过指定确切的版本号来权衡获得补丁和改进更新的好处。