繁体   English   中英

Dart Package 版本如何工作以及我应该如何对我的 Flutter 插件进行版本控制?

[英]How do Dart Package Versions work & how should I version my Flutter Plugins?

我想知道如何在我的 Flutter 应用程序中解决 Dart package 版本。

说,我有一个依赖foo并声明一个这样的依赖项:

dependencies:
  foo: ^1.2.3

Dart Pub 如何知道要解决的版本/新版本可用时会发生什么?


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

Dart package 版本控制

所有这些都可以追溯到Dart package 版本控制,即 Flutter 插件没有区别。

它基于SemVer 2.0.0-rc.1 (语义版本控制) 对于 Dart 封装,公约要点如下:

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

请注意,Pub 还支持预发布版本,如下所示:

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

示例版本可能是0.6.0-nullsafety.0 (补丁版本为0.6.0-nullsafety.1 )或2.0.0-dev.1

了解有关 Dart 的 package 版本控制的更多信息

解析版本

要基本了解版本解析试图解决的问题,您可以阅读 Dart 的 package 版本控制文章的解决共享依赖项部分。 我将在这里看到的版本解析方面是插入符号语法

Caret ^语法是用于解析 Dart 中的版本的标准语法,并且与上面的版本控制表密切相关。 每当您使用foo: ^1.0.0定义依赖项时,都会涉及一些逻辑来确定可以从该字符串解析哪些版本。

通常, ^主要版本匹配。 这意味着每当您的 API 发生重大更改时,您都需要升级主要版本,因为这样依赖项将不会自动升级到您的下一个 package 版本。 我将尝试再次在表格中说明匹配:

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

如您所见,插入符号语法将匹配大于或等于当前版本但小于下一个主要版本的任何版本。

请注意,预发布版本的处理方式与 Dart 中的正常版本不同(不完全根据 SemVer 规范)。 您可以在 GitHub 上找到Pub 的pub_semver工具的源代码 它声明预发布版本与插入符号语法匹配(传统语法也不匹配):

^1.0.0 匹配版本?
1.4.2 是的
1.5.0-beta 是的
2.0.0-alpha
2.0.0

详细了解 Dart 的 package 依赖项

pubspec.lock

我很快想提一下 Pubspec锁定文件在 Dart 中的依赖关系解析的作用。

我认为有一种直接的方式可以定义如何获取 package 版本:

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

因此,在您的应用程序中运行pub get不会意外获取新版本。 并且在与同事合作时,每个人在运行pub get并在版本控制中包含锁定文件时,都会根据pubspec.lock文件获取相同的版本。

在 Dart 中了解有关锁定文件的更多信息

最佳实践

因为Dart 团队推荐了一些版本控制的最佳实践,所以我想确保将它们直接包含在此处:

使用插入符号语法
使用版本范围指定依赖项(例如^1.6.3 )是一种很好的做法,因为它允许发布工具在 select 可用时更新 package 版本。 此外,基于包使用语义版本的假设,它对允许的版本设置了上限,其中任何版本的路径版本1.x都是兼容的,但新版本2.x将是一个重大升级t 在语义上与1.x版本兼容。

依赖于最新稳定的 package 版本
使用pub upgrade更新到您的 pubspec 允许的最新 package 版本。 要识别您的应用程序或 package 中不在最新稳定版本上的依赖项,请使用pub outdated

每当您更新 package 依赖项时进行测试
如果您在不更新 pubspec 的情况下运行pub upgrade ,则 API 应该保持不变,并且您的代码应该像以前一样运行 - 但要进行测试以确保。 如果您修改 pubspec 并更新到新的主要版本,那么您可能会遇到重大更改,因此您需要进行更彻底的测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM