【问题标题】:How to automatically upgrade Flutter dependencies如何自动升级 Flutter 依赖
【发布时间】:2020-01-05 21:52:45
【问题描述】:

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

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

flutter pub upgrade

参考:Upgrading packages only

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

颤振酒吧升级

然而似乎什么也没发生。 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

【问题讨论】:

    标签: flutter dart-pub


    【解决方案1】:

    上述方法有效,但您可以使用此命令:

    flutter pub upgrade --major-versions
    

    它将更新您的所有依赖项。

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

    参考这个: https://stackoverflow.com/a/67517680/13500457

    我希望它能清除一切,编码愉快!

    【讨论】:

    • 这完全做到了!
    • 这应该被接受为答案,谢谢!
    【解决方案2】:

    Flutter 会自动升级基于 semantic versioning 的非破坏性更改。您不希望自动进行重大更改。更新反映在 pubspec.lock 中,而不是 pubspec.yaml

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

    Android 工作室

    Flutter Pub Version Checker

    此插件会突出显示您在 pubspec.yaml 中拥有的所有已过期的依赖项,以便您可以根据需要选择更新它们。

    Visual Studio 代码

    Pubspec Assist

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

    【讨论】:

    • 我不同意“你不希望破坏性的改变是自动的”,我更倾向于认为“你不希望任何改变都是自动的”,基于此引入问题的可能性令人难以置信, WDYT?
    • @DanielGomezRico,如果您不希望自动进行任何更改,则可以从版本号前面删除^。但是,只要包开发人员遵循语义版本控制,留下^ 就可以了,因为根据定义不会有重大更改。但即使有重大更改,您仍然会在发布应用程序之前对其进行测试。以我的经验,我只有一次经历,一个小的改变破坏了一些东西。 (这就是 Dart 2.8 本身。)
    • 对我来说,痛苦来自一些 2 或 3 年前制作的旧项目,并且让它们重新编译非常可怕,找到哪个依赖项(有一个类似 30 个依赖项的列表)
    • stackoverflow.com/a/66759292/13500457 当你使用你提到的方法时,当你移动光标并按 alt + enter 到所有依赖项时,它会花费一些时间,所以最好使用这个命令“flutter pub upgrade --major-versions ”也不会出现“由于 SDK 版本不兼容导致的版本解决错误”,因此请使用此链接了解详细信息。编码愉快!
    • @Suragch 很抱歉评论一个旧答案,但我有一个疑问:当您说“Flutter 根据语义版本控制自动升级非破坏性更改。”时,您的意思是,当您使用 flutter pub upgrade命令?
    【解决方案3】:

    运行pub 永远不会改变pubspec.yaml。但是,它可能会解决与指定的“基本”版本不同的版本 - 前导 caret 允许 pub 解决:

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

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

    【讨论】:

    • 所以OP“如何自动升级Flutter依赖项”的答案是......没有办法?
    • @adrianvintu 是的,请检查我自己的答案。
    【解决方案4】:

    声明依赖版本有两种方式:

    1. Caret syntax - 它保证向后兼容性。示例:^1.3.0
    2. Traditional syntax - 极大的灵活性,多种控制选项。示例:&gt;=1.2.3

    行为类似于带有 Node.js 依赖管理的package.json

    您选择在pubspec.yaml 中声明依赖项的方式将定义实际依赖项 将如何在pubspec.lock 文件中定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-11
      • 2021-06-03
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 2021-06-03
      • 2019-10-31
      • 2011-09-28
      相关资源
      最近更新 更多