如何自动升级Flutter依赖

95

我的Flutter项目有一个依赖flutter_dotenv,版本为^2.0.1,我想自动升级到新的版本^2.0.2

我正在运行以下命令进行升级:

flutter pub upgrade

参考: 仅升级软件包

为了更新 pubspec.yaml 文件中列出的所有依赖项到最新兼容版本,请使用 upgrade 命令:

flutter pub upgrade

然而似乎没有任何变化。 pubspec.yaml 没有改变,并且控制台输出没有提到新版本(这已足够)。

我的 pubspec.yaml 如下所示:

environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  flutter_dotenv: ^2.0.1
  cupertino_icons: ^0.1.2

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:
  uses-material-design: true
6个回答

175

以上方法是可行的,但您也可以使用以下命令:

flutter pub upgrade --major-versions

它将更新所有依赖项。

还要检查“如何正确添加依赖项以避免“版本解决失败”错误”

请参考此链接: https://dev59.com/tFkJtIcB2Jgan1znOtjx#67517680


2
这会同时更新 pubspec.yaml 文件吗? - giorgio79
是的,绝对没错 @giorgio79 - Apoorv Pandey
截至两周前,现在有一个--tighten标志,它将更新pubspec.yaml以进行次要更改。 - undefined

38

Flutter会根据语义化版本控制自动升级非破坏性更改。您不希望自动进行重大更改。更新反映在pubspec.lock中,但不反映在pubspec.yaml中。

有一些IDE插件可以帮助您更轻松地升级软件包,而不是一个一个在pub.dev上查找它们。

Android Studio

Flutter Pub Version Checker

此插件会突出显示 pubspec.yaml 中过期的任何依赖项,以便您可以选择是否要更新它们。

Visual Studio Code

Pubspec Assist

此插件使添加或更新依赖项变得超级简单,而无需转到pub.dev,但您仍然需要逐个检查它们。


1
我不同意“你不想让破坏性的更改自动化”,我更倾向于认为“你不希望任何更改是自动的”。基于此引入问题的可能性是难以置信的,你认为呢? - Daniel Gomez Rico
1
@DanielGomezRico,如果您不希望任何更改自动进行,则可以从版本号前面删除“^”。但是,只要软件包开发人员遵循语义化版本控制,保留“^”就可以了,因为根据定义,不会有任何破坏性的更改。但即使有破坏性的更改,您仍然需要在发布之前测试您的应用程序。根据我的经验,我只遇到过一次次要更改导致某些问题的情况。(而那是Dart 2.8本身的问题。) - Suragch
1
对我来说,痛苦来自于一些早期的项目,它们大约是在2或3年前创建的,重新编译它们是非常可怕的,找到其中哪些依赖项(有一个长达30个依赖项的列表)是非常困难的。 - Daniel Gomez Rico
当您使用您提到的方法时,它会花费一些时间,当您移动光标并按alt + enter到所有依赖项时,最好使用此命令“flutter pub upgrade --major-versions”,这样您将不会遇到“由于SDK版本不兼容而导致的版本解决错误”,因此请参考链接以获取详细信息。祝编码愉快! - Apoorv Pandey
@Suragch 很抱歉评论了一个旧答案,但我有一个疑问:当你说“Flutter根据语义化版本控制自动升级非破坏性更改”时,你是指使用flutter pub upgrade命令吗? - Giacomo M
@GiacomoM,是的,没错。(或者在flutter pub get命令中,如果你没有pubspec.lock文件的话。)请参考Flutter和Dart的所有关于Pub命令行工具的内容 - Suragch

8
运行pub不会改变pubspec.yaml文件。然而,它可能解决到不同于“基本”版本的版本-前导caret允许pub解决到:

所有版本保证向后兼容指定版本的范围内

检查pubspec.lock文件,你可能会看到pub已经解决到了version: "2.0.2"

1
那么对于“如何自动升级Flutter依赖项”的问题,答案是……没有办法? - adrianvintu
@adrianvintu 是的,有的,请查看我的答案。 - Evandro Pomatti

5

针对从旧版本升级到null安全版本的情况:

//Upgrading flutter sdk
flutter upgrade
//Upgrading dart code
dart migrate
// Upgrading all pubspec.yaml package versions
flutter pub outdated --mode=null-safety

// Download all new versions of the packages
dart pub get

再次升级dart代码。在这个阶段,你应该手动或使用迁移指南来纠正所有问题,否则会出现“由于分析错误,迁移工具无法启动”的情况。

// See list of available fixes
dart fix --dry-run

// Fix all issues automatically
dart fix --apply

请参考这篇文章了解更多详情。

在此处查看Flutter迁移指南


3
有两种声明依赖版本的方法:
  1. 插入符号语法 - 它保证向后兼容。例如:^1.3.0
  2. 传统语法 - 极大的灵活性,有许多选项供您控制。例如:>=1.2.3
该行为类似于使用Node.js依赖管理的package.json
您在pubspec.yaml中选择声明依赖项的方式将定义pubspec.lock文件中实际依赖项的定义。

pubspec.yaml 中检测到错误: 第 11 行,第 20 列出现错误:期望注释或换行符。 ╷ 11 │ add_2_calendar: >=2.1.3 - Justin

1

即使运行flutter pub upgrade --major-versions(如此处所回答的),也不会更改pubspec.yaml文件,请尝试以下操作:

flutter pub add [dependency]

上述命令将显示消息"[dependency]"已在"dependencies"中。将尝试更新约束条件。,并在pubspec.yaml上反映最新的依赖版本,如果存在的话。


我使用flutter pub upgrade --major-versions命令,效果很好。 - Abdullah Bahattab
我使用了flutter pub upgrade --major-versions命令,效果很好。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接