Flutter 的 pubspec.yaml 中依赖版本号前的插入符号 (^) 是什么?

What is the caret sign (^) before the dependency version number in Flutter's pubspec.yaml?

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

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

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

备注

脱字符号 (^) 在 Dart 中用于 pub dependencies 以指示允许的版本号范围。具体来说,从指定版本到(但不包括)下一个 non-breaking 版本的任何版本都可以。

  • 因此 ^3.1.5'>=3.1.5 <4.0.0'
  • 相同
  • 并且^1.2.3'>=1.2.3 <2.0.0'
  • 相同

较长的表格是 shorthand。

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

备注

对低于 1.0.0 的版本的说明

本来我以为

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

然而,这是对Semantic Versioning的错误理解。当主版本号为0时(如0.1.2中的0),意思是API不稳定甚至次版本号变化(如1 of 0.1.2) 可以表示重大更改。

Semantic Versioning 文章指出:

Major version zero (0.y.z) is for initial development. Anything may change at any time. The public API should not be considered stable.

还有

How should I deal with revisions in the 0.y.z initial development phase?

The simplest thing to do is start your initial development release at 0.1.0 and then increment the minor version for each subsequent release.

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

  • ^0.1.2 等同于 '>=0.1.2 <0.2.0'

感谢 指出我的错误。

另见

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

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

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

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

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