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

纵然是瞬间 提交于 2019-12-05 09:34:07

问题


In the pubspec.yaml file of my Flutter project there is a caret (^) before the version number of some of the dependencies.

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

What is its purpose? What does it mean?

Notes

  • I looked in the yaml documentation but I didn't see anything that made sense.
  • Related: what does Caret sign do in Dart (but it isn't an XOR operator here)
  • Related: In Flutter, Dependencies must specify version number? (an answer pointed me in the right direction but the question is asking something different)

回答1:


The caret sign (^) is used for pub dependencies in Dart to indicate a range of version numbers are allowed. Specifically, any version from the specified version up to (but not including) the next non-breaking version is ok.

  • So ^3.1.5 is the same as '>=3.1.5 <4.0.0'
  • And ^1.2.3 would be the same as '>=1.2.3 <2.0.0'

It's shorthand for the longer form.

The ^ is saying, I want to automatically use the most up-to-date package from Pub as long as that update won't break anything in my app.

Notes

  • The concept of Semantic Versioning is important here. Read the article at the link if you are not familiar with it.
  • Version constraints documentation
  • Caret syntax documentation

Clarification for versions less than 1.0.0

Originally I had thought that

  • ^0.1.2 is the same as '>=0.1.2 <1.0.0' (wrong!)

However, that is an incorrect understanding of Semantic Versioning. When the major version number is 0 (as in the 0 of 0.1.2), the meaning is that the API is unstable and even minor version number changes (as in the 1 of 0.1.2) can indicate a breaking change.

The Semantic Versioning article states:

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

and also

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.

Thus, the following is the corrected form:

  • ^0.1.2 is the same as '>=0.1.2 <0.2.0'

Thank you to Günter Zöchbauer for pointing out my error.




回答2:


The caret sign ^ means the specified version and all newer versions that don't introduce breaking changes relative to the specified version.

Dart follows Semantic Versioning and suggests that to be used for package maintainers as well.

Semantic Versioning defines that

  • for versions >= 1.0.0 the major version needs to be incremented for breaking changes.
  • for versions < 1.0.0 the minor version needs to be incremented for breaking changes.

^2.4.3 means >= 2.4.3 < 3.0.0 ^0.17.19 means > 0.17.19 <0.18.0




回答3:


it means that any new versions of a dependency that does not contain breaking changes will be accepted.

dart follows semantic versioning and uses it for package maintainers.

in layman's terms ^1.8.1 means >= 1.8.1 < 2.0.0



来源:https://stackoverflow.com/questions/53563079/what-is-the-caret-sign-before-the-dependency-version-number-in-flutters-pub

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!