【问题标题】:What is the caret sign (^) before the dependency version number in Flutter's pubspec.yaml?Flutter 的 pubspec.yaml 中依赖版本号前的脱字符号 (^) 是什么?
【发布时间】:2019-05-02 22:28:31
【问题描述】:

在我的 Flutter 项目的 pubspec.yaml 文件中,某些依赖项的版本号之前有一个插入符号 (^)。

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^0.1.2
  english_words: ^3.1.5

它的目的是什么?什么意思?

备注

【问题讨论】:

  • 您链接到的 YAML 规范有点过时,最新版本是 1.2。在底部你会找到一个索引,如果^ 是 YAML 的特殊标记(不是),你会在那里找到一个链接。独立于许多 YAML 规范并没有多大意义;-)

标签: flutter dart dart-pub semantic-versioning


【解决方案1】:

插入符号 (^) 在 Dart 中用于 pub dependencies,表示允许的版本号范围。具体来说,从指定版本到(但不包括)下一个非破坏性版本的任何版本都可以。

  • 所以^3.1.5'>=3.1.5 <4.0.0' 相同
  • ^1.2.3 将与'>=1.2.3 <2.0.0' 相同

它是较长形式的简写。

^ 说,我想自动使用 Pub 中最新的软件包,只要该更新不会破坏我的应用程序中的任何内容。

注意事项

1.0.0 以下版本的说明

原来我也这么认为

  • ^0.1.2'>=0.1.2 <1.0.0' 相同 (错误!)

但是,这是对Semantic Versioning 的错误理解。当主版本号为0时(如0.1.20),意思是API不稳定,即使是小版本号的变化(如0.1.21)也可以表明一个突破性的变化。

Semantic Versioning 文章指出:

主要版本零 (0.y.z) 用于初始开发。任何事情都可能随时改变。公共 API 不应该被认为是稳定的。

还有

0.y.z初始开发中的修改应该如何处理 阶段?

最简单的方法是在以下位置开始您的初始开发版本 0.1.0,然后为每个后续版本增加次要版本。

因此,修正后的形式如下:

  • ^0.1.2'>=0.1.2 <0.2.0' 相同

感谢Günter Zöchbauer 指出我的错误。

另见

【讨论】:

  • 我们添加 4.0.0 的依据是什么?类似 2.0.0。我们如何确定最大版本?
  • @jitsm555,最大版本是最小版本之后的下一个主要数字。如果最小版本为3.1.5,则主版本号为33 之后的下一个数字是 4,因此最大版本是 4.0.0(即任何小于 4.0.0 但不包括 4.0.0 本身的数字)。
  • @Suragch 从2.0.02.1.0 的更新是否也被视为重大更改?
  • @iDecode,不,2.0.02.1.0 不是重大更改。
  • @Suragch 谢谢,这意味着2.1.02.0.1 都不会破坏2.0.0 的包的更改。
【解决方案2】:

插入符号^ 表示指定版本以及相对于指定版本没有引入重大更改的所有较新版本。

Dart 遵循语义版本控制并建议也用于包维护者。

语义版本控制定义了这一点

  • 对于版本 >= 1.0.0,需要增加主要版本才能进行重大更改。
  • 对于版本 < 1.0.0,需要增加次要版本以进行重大更改。

示例:

^2.4.3 表示>= 2.4.3 < 3.0.0

^0.17.19 表示>= 0.17.19 <0.18.0

【讨论】:

  • 感谢您的澄清。我误解了关于主要版本 0 的部分。
  • 想着只是加个评论buf怕会太长。
【解决方案3】:

这意味着任何不包含重大更改的依赖项的新版本都将被接受。

Dart 语言遵循语义版本控制并将其用于包维护者。

通俗地说^1.8.1 means >= 1.8.1 < 2.0.0

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 2021-03-24
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 2016-06-21
    • 2022-01-22
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多