gpt4 book ai didi

flutter - Dart 包版本如何工作以及我应该如何版本我的 Flutter 插件?

转载 作者:行者123 更新时间:2023-12-04 11:09:22 30 4
gpt4 key购买 nike

我想知道我的 Flutter 应用程序中如何解决 Dart 包版本。
说,我有一个依赖项 foo并声明一个这样的依赖项:

dependencies:
foo: ^1.2.3
Dart Pub 如何知道要解析哪个版本/新版本可用时会发生什么?

此外,如果我想将我的 Flutter 插件发布到 pub.dev,我如何决定何时增加版本的哪个部分?

最佳答案

Dart 包版本控制
所有这些都可以追溯到 Dart 包版本控制,即 Flutter 插件没有区别。
它基于 SemVer 2.0.0-rc.1 (Semantic Versioning) .对于 Dart 包,公约的要点如下:

<1.0.0>=1.0.0
0.major.minor+patchmajor.minor.patch

请注意,Pub 还支持由以下表示的预发布版本:

<1.0.0>=1.0.0
0.major.0-prerelease.patchmajor.0.0-prerelease.patch

示例版本可能是 0.6.0-nullsafety.0 (补丁版本为 0.6.0-nullsafety.1 )或 2.0.0-dev.1 .
Learn more about Dart's package versioning .
解决版本
要基本了解版本解析尝试解决的问题,您可以阅读 Resolving shared dependencies Dart 的包版本控制文章的部分。我将在这里查看的版本解析方面是 caret syntax .
插入符号 ^语法是 Dart 中解析版本的标准语法,与上面的版本表密切相关。每当您使用 foo: ^1.0.0 定义依赖项时,这涉及到一些逻辑来确定可以从该字符串解析哪些版本。
一般来说,^匹配 直到主要版本 .这意味着只要您有 突破性变化 在您的 API 中,您将希望提升主要版本,因为这样依赖项将不会自动升级到您的下一个包版本。我将再次尝试在表格中说明匹配:

^0.4.2+1^1.3.0
>=0.4.2+1 <0.5.0>=1.3.0 <2.0.0

如您所见,插入符语法将匹配大于或等于当前版本但小于下一个主要版本的任何版本。
请注意,在 Dart 中,预发布版本的处理方式与正常版本不同(并非完全按照 SemVer 规范)。您可以找到 the source code for Pub's pub_semver tool on GitHub .它声明预发布版本为 不是 与插入符号语法匹配(而不是传统语法):

^1.0.0匹配版本?

1.4.2是的
1.5.0-beta是的
2.0.0-alpha
2.0.0


Learn more about Dart's package dependencies .pubspec.lock我很快想提一下 Pubspec 的作用锁定文件 用于在 Dart 中解决依赖项。
我认为有一种直接的方式定义了如何获取包版本:

  • pub get 没有退出 pubspec.lock (初始获取)将获取 最新的可能 版本(根据上述规则并满足共享依赖项的所有直接和传递约束)。
  • pub get 与现有 pubspec.lock file 将更喜欢锁定文件中的锁定版本而不是最新版本(如果它们仍然满足自上次获取以来可能新引入的依赖项的约束)。
  • pub upgrade 扔掉现有的 pubspec.lock文件,然后以与初始 pub get 相同的方式起作用.

  • 因此,运行 pub get 在您的应用程序中不会意外获取新版本。和同事一起工作时,每个人都会根据 pubspec.lock获取相同的版本。运行时的文件 pub get 并将锁定文件包含在版本控制中。
    Learn more about lockfiles in Dart .
    最佳实践
    因为 the Dart team recommends some best practices for versioning ,我想确保将它们直接包含在此处:

    Use caret syntax
    Specifying dependencies with version ranges is such as ^1.6.3 is a good practice because it allows the pub tool to select newer versions of the package when they become available. Also, it places an upper limit on the allowed version, based on an assumption that packages use semantic versions, where any version of path versioned 1.x is compatible, but where a new version 2.x would be a major upgrade that isn’t semantically compatible with 1.x versions.

    Depend on the latest stable package versions
    Use pub upgrade to update to the latest package versions that your pubspec allows. To identify dependencies in your app or package that aren’t on the latest stable versions, use pub outdated.

    Test whenever you update package dependencies
    If you run pub upgrade without updating your pubspec, the API should stay the same and your code should run as before — but test to make sure. If you modify the pubspec and update to a new major version, then you might encounter breaking changes, so you need to test even more thoroughly.

    关于flutter - Dart 包版本如何工作以及我应该如何版本我的 Flutter 插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66201337/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com