【问题标题】:Why doesn't build_runner generate files when serializing JSON in dart/flutter为什么 build_runner 在 dart/flutter 中序列化 JSON 时不生成文件
【发布时间】:2020-04-27 07:53:23
【问题描述】:

我只是想用 3 个月前存储的相同命令生成我的文件(我对后端和 devops 不是很好),现在它不再生成文件了。 它告诉我使用我不记得的删除命令,但即使使用该命令,我的文件仍然不会生成。 这是我的日志的样子,下面你可以找到一个简单类的代码。

我的一个猜测是这与我更改我的 github 帐户有关,因为这里提到了权限问题。

我在 Windows 10 中使用 vs 代码。

日志文件:

E:\1 Work\flutter_pilot> flutter pub run build_runner build
[INFO] Generating build script...
[INFO] Generating build script completed, took 336ms

[WARNING] Deleted previous snapshot due to missing asset graph.
[INFO] Creating build script snapshot......
[INFO] Creating build script snapshot... completed, took 12.5s

[INFO] Initializing inputs
[INFO] Building new asset graph...
[INFO] Building new asset graph completed, took 787ms

[INFO] Checking for unexpected pre-existing outputs....
[INFO] Found 13 declared outputs which already exist on disk. This is likely because the`.dart_tool/build` folder was deleted, or you are submitting generated files to your source repository.
[SEVERE] Conflicting outputs were detected and the build is unable to prompt for permission to remove them. These outputs must be removed manually or the build can be run with `--delete-conflicting-outputs`. The outputs are: lib/models/advisory-service-item.g.dart
lib/models/advisory-service.g.dart
lib/models/auth.g.dart
lib/models/contract.g.dart
lib/models/contributor.g.dart
lib/models/exact-cost-values.g.dart
lib/models/exact-cost.g.dart
lib/models/expert.g.dart
lib/models/paginator-info.g.dart
lib/models/person.g.dart
lib/models/project.g.dart
lib/models/system-country.g.dart
lib/models/user.g.dart
pub failed (78)

类文件:

import 'package:json_annotation/json_annotation.dart';
part 'organisation.g.dart';

@JsonSerializable()
class Organisation {
  final String name;
  Organisation({this.name});

  factory Organisation.fromJson(Map<String, dynamic> json) => _$OrganisationFromJson(json);

  Map<String, dynamic> toJson() => _$OrganisationToJson(this);
}

【问题讨论】:

    标签: flutter dart dart-pub build-runner


    【解决方案1】:

    我遇到了类似的问题,但我使用的是 Android Studio IDE,并且我已经完成了以下步骤:

    文件 => 使缓存无效/重新启动

    运行以下命令:

    flutter clean
    
    flutter pub get
    
    flutter packages pub run build_runner build --delete-conflicting-outputs  
         
    

    关于--delete-conflicting-outputs

    假设 users 包中的冲突输出来自以前的构建,并跳过通常会提供的用户提示。

    Reference

    【讨论】:

      【解决方案2】:

      如果您仔细阅读错误消息,您会发现它要求您尝试在命令末尾添加--delete-conflicting-outputs。所以你应该试试flutter packages pub run build_runner build --delete-conflicting-outputs

      【讨论】:

      • 正如我已经说过的(可能是更糟糕的英语,因为它不是我的母语)我已经尝试过了,但是文件只是被删除并且没有生成任何内容。
      • 我明白了。看来命令在 user.g.dart 处停止了?你检查过那个文件吗?我实际上有时会遇到这个错误,并意识到我只是在某处有错字或缺少部分“something.g.dart”代码
      • 用户是列表中的最后一个文件。检查它只是一个名称和一个 id 获取并在那里设置没有错误。
      • 很抱歉无法帮助您找出问题所在。但根据我过去遇到同样错误的经验,这通常是一个错字、一些错误代码或缺少部分“file.g.dart”代码。不过,如果您愿意与我分享您的代码,我可以花一点时间帮助您找出问题所在。
      • 我认为这是 build_runner 的一个 bug 删除所有 build_runner 相关文件并重新启动代码编辑器,它会工作
      【解决方案3】:

      在我的情况下,将 part 'file_name.g.dart'; 添加到文件顶部会有所帮助。

      file_name.dart:

      import 'package:json_annotation/json_annotation.dart';
      
      part 'file_name.g.dart';
      
      @JsonSerializable()
      class YourClass {
      
          factory YourClass.fromJson(Map<String, dynamic> json) => _$YourClassFromJson(json);
      
          Map<String, dynamic> toJson() => _$YourClassToJson(this);
      
          // ... your class code
      }
      

      【讨论】:

      • 我需要这个 flutter pub run build_runner build --delete-conflicting-outputs 来获取文件和 .g.dart 文件。
      • 哇,我在文件名中有错字,谢谢你的回答
      • 添加 part 行(即使 VSCode 会因为它尚未生成而引发错误)对我有用...
      【解决方案4】:

      我有同样的问题。使用以下命令解决

      flutter packages pub run build_runner build --delete-conflicting-outputs  
      

      【讨论】:

        【解决方案5】:

        您只需运行以下代码..

        flutter pub run build_runner build --delete-conflicting-outputs
        

        【讨论】:

        • 这应该是公认的答案。简单
        【解决方案6】:

        我认为我们大多数人发生这种情况的主要原因是,当您之前运行此命令时,您可能会将生成的 g.dart 文件添加到源代码管理中。这反过来会阻止build_runner 重新生成先前生成的g.dart 文件,即使您只需要新的g.dart 文件,它也会这样做。现在,我知道这可能很难理解,但请考虑一下:

        1. 假设您有一个search_entry.dart 文件。
        2. 您运行了命令,并生成了search_entry.g.dart 文件 成功。
        3. 然后您继续将生成的search_entry.g.dart 文件添加到 您的源代码控制存储库。
        4. 你制作了另一个文件,比如说cached_data_entry.dart
        5. 当您第二次运行该命令以生成 cached_data_entry.dart,它会尝试删除 search_entry.g.dart 文件与 cached_data_entry.dart 文件。
        6. 由于search_entry.g.dart 受到源代码控制的保护, 构建运行器将无法删除它,因此,它会抛出这个 错误。
        7. 现在,您需要做的是修复当前情况,删除 以前所有之前生成的g.dart 文件, (在我们的示例中为search_entry.g.dart),然后将其添加到被忽略的 源代码管理中.gitignore 文件中的文件。然后运行 再次命令,希望你这次会成功。
        8. 您以后应该做的是忽略您的这些文件 生成它们后立即进行源代码管理。

        现在,最后,我希望我已经把它说得尽可能清楚了。

        【讨论】:

        • 什么时候源代码管理不允许编辑或删除文件?
        【解决方案7】:

        我遇到了同样的问题。起初我生成了一个 myFirstGeneratedFile.g.dart 文件,然后我需要另一种对象类型来存储,然后当我尝试使用此命令生成文件时 =>

        flutter packages pub run build_runner clean

        我收到了错误消息。

        我通过删除之前创建的文件来修复它 => myFirstGeneratedFile.g.dart 然后再次运行该命令。

        干杯!

        【讨论】:

          【解决方案8】:

          运行“flutter pub upgrade”为我解决了这个问题。

          【讨论】:

            【解决方案9】:

            删除.dart_tool 文件夹并运行flutter pub get。之后,运行 build runner 命令

            【讨论】:

              【解决方案10】:

              在我的例子中,我声明了一个名为 Organisation.dart 而不是小写字母 organisation.dart 的 dart 文件,折射它并再次运行构建运行器对我有用。

              【讨论】:

                【解决方案11】:

                就我而言,我忘记了导入 mobx_codegen

                【讨论】:

                  【解决方案12】:

                  将built_value_generator 添加到pubspec.yamldev_dependencies 部分 https://pub.dev/packages/built_value_generator

                  您可以阅读官方文档-https://dart.dev/tools/build_runner

                  【讨论】:

                    【解决方案13】:

                    在我的例子中,build_runner 过程是成功的,但没有生成 .g 文件。在开始查看 .g 文件之前,我必须重新启动 IDE(vscode)。

                    【讨论】:

                      猜你喜欢
                      • 2020-02-10
                      • 2018-05-29
                      • 2021-09-07
                      • 1970-01-01
                      • 2020-01-02
                      • 2021-09-05
                      • 2012-02-07
                      • 2022-01-13
                      • 2020-09-25
                      相关资源
                      最近更新 更多