为什么在 dart/flutter 中序列化 JSON 时 build_runner 不生成文件
Why doesn't build_runner generate files when serializing JSON in dart/flutter
我只是想用我 3 个月前存储的相同命令生成我的文件(我对后端和 devops 不是很好),现在它不再生成文件了。
它告诉我使用我不记得的删除命令,但即使使用那个我的文件仍然不会生成。
这就是我的日志的样子,您可以在下面找到简单 class.
的代码
我的猜测之一是这与我更改 github 帐户有关,因为提到了权限问题。
我在 windows 10.
中使用 VS 代码
日志文件:
E: 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)
class 文件:
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);
}
如果您仔细阅读错误消息,您会发现它要求您尝试在命令末尾添加 --delete-conflicting-outputs
。所以你应该试试 flutter packages pub run build_runner build --delete-conflicting-outputs
.
运行 "flutter pub upgrade" 解决了我的问题。
删除 .dart_tool
文件夹和 运行 flutter pub get
。在此之后,运行 build 运行ner 命令
在我的例子中,我已经声明了一个名为 Organisation.dart
而不是小写字母 organisation.dart
的飞镖文件,折射这个并且 运行 build runner 再次为我工作。
我遇到了类似的问题,但我使用的是 Android Studio IDE 并且我已完成以下步骤:
文件 => 使缓存无效/重新启动
运行 以下命令:
flutter clean
flutter pub get
flutter packages pub run build_runner build --delete-conflicting-outputs
关于--删除冲突输出
假设用户包中的冲突输出来自以前的版本,并跳过通常会提供的用户提示。
我遇到了同样的问题。起初我生成了一个 myFirstGeneratedFile.g.dart 文件,然后我需要另一种对象类型来存储,然后当我尝试使用此命令生成文件时 =>
flutter packages pub run build_runner clean
我收到错误消息。
我通过删除之前创建的文件修复了它 => myFirstGeneratedFile.g.dart 然后再次 运行 命令。
Cheers!
就我而言,将 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
文件添加到源代码管理中。这反过来会阻止 build_runner
重新生成先前生成的 g.dart
文件,即使您只需要新的 g.dart
文件,它也会这样做。现在,我知道这可能很难理解,但考虑一下:
- 假设您有一个
search_entry.dart
文件。
- 你运行命令,生成了
search_entry.g.dart
文件
成功。
- 然后您继续将生成的
search_entry.g.dart
文件添加到
您的源代码控制存储库。
- 你再做一个文件,比方说可能
cached_data_entry.dart
.
- 当你运行第二次命令生成
cached_data_entry.dart
,它将尝试删除
search_entry.g.dart
文件与
cached_data_entry.dart
文件。
- 由于
search_entry.g.dart
在源代码管理下受到保护,
构建 运行ner 将无法删除它,因此,它会抛出这个
错误。
- 现在,您需要做的就是删除
以前所有以前生成的
g.dart
文件,
(search_entry.g.dart
在我们的示例中),然后将其添加到被忽略的
源代码管理中 .gitignore
文件中的文件。然后 运行
再次命令,希望你这次能成功
- 你以后应该做的,就是忽略你的这些文件
生成它们后立即进行源代码管理。
现在,最后,我希望我已经把它说得尽可能清楚了。
就我而言,我忘记了导入mobx_codegen包
我遇到了同样的问题。使用以下命令解决
flutter packages pub run build_runner build --delete-conflicting-outputs
将 built_value_generator 添加到 pubspec.yaml
到 dev_dependencies
部分
https://pub.dev/packages/built_value_generator
你可以阅读官方文档 - https://dart.dev/tools/build_runner
在我的例子中,build_runner 过程是成功的,但没有生成 .g 文件。在开始看到 .g 文件之前,我必须重新启动 IDE (vscode)。
通过终端尝试这样的事情:
- 通过命令删除之前生成的文件:find ./ -name '*.g.dart' -delete
- 然后:flutter packages pub 运行 build_runner watch —delete-conflicting-outputs
我只是想用我 3 个月前存储的相同命令生成我的文件(我对后端和 devops 不是很好),现在它不再生成文件了。 它告诉我使用我不记得的删除命令,但即使使用那个我的文件仍然不会生成。 这就是我的日志的样子,您可以在下面找到简单 class.
的代码我的猜测之一是这与我更改 github 帐户有关,因为提到了权限问题。
我在 windows 10.
中使用 VS 代码日志文件:
E: 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)
class 文件:
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);
}
如果您仔细阅读错误消息,您会发现它要求您尝试在命令末尾添加 --delete-conflicting-outputs
。所以你应该试试 flutter packages pub run build_runner build --delete-conflicting-outputs
.
运行 "flutter pub upgrade" 解决了我的问题。
删除 .dart_tool
文件夹和 运行 flutter pub get
。在此之后,运行 build 运行ner 命令
在我的例子中,我已经声明了一个名为 Organisation.dart
而不是小写字母 organisation.dart
的飞镖文件,折射这个并且 运行 build runner 再次为我工作。
我遇到了类似的问题,但我使用的是 Android Studio IDE 并且我已完成以下步骤:
文件 => 使缓存无效/重新启动
运行 以下命令:
flutter clean
flutter pub get
flutter packages pub run build_runner build --delete-conflicting-outputs
关于--删除冲突输出
假设用户包中的冲突输出来自以前的版本,并跳过通常会提供的用户提示。
我遇到了同样的问题。起初我生成了一个 myFirstGeneratedFile.g.dart 文件,然后我需要另一种对象类型来存储,然后当我尝试使用此命令生成文件时 =>
flutter packages pub run build_runner clean
我收到错误消息。
我通过删除之前创建的文件修复了它 => myFirstGeneratedFile.g.dart 然后再次 运行 命令。
Cheers!
就我而言,将 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
文件添加到源代码管理中。这反过来会阻止 build_runner
重新生成先前生成的 g.dart
文件,即使您只需要新的 g.dart
文件,它也会这样做。现在,我知道这可能很难理解,但考虑一下:
- 假设您有一个
search_entry.dart
文件。 - 你运行命令,生成了
search_entry.g.dart
文件 成功。 - 然后您继续将生成的
search_entry.g.dart
文件添加到 您的源代码控制存储库。 - 你再做一个文件,比方说可能
cached_data_entry.dart
. - 当你运行第二次命令生成
cached_data_entry.dart
,它将尝试删除search_entry.g.dart
文件与cached_data_entry.dart
文件。 - 由于
search_entry.g.dart
在源代码管理下受到保护, 构建 运行ner 将无法删除它,因此,它会抛出这个 错误。 - 现在,您需要做的就是删除
以前所有以前生成的
g.dart
文件, (search_entry.g.dart
在我们的示例中),然后将其添加到被忽略的 源代码管理中.gitignore
文件中的文件。然后 运行 再次命令,希望你这次能成功 - 你以后应该做的,就是忽略你的这些文件 生成它们后立即进行源代码管理。
现在,最后,我希望我已经把它说得尽可能清楚了。
就我而言,我忘记了导入mobx_codegen包
我遇到了同样的问题。使用以下命令解决
flutter packages pub run build_runner build --delete-conflicting-outputs
将 built_value_generator 添加到 pubspec.yaml
到 dev_dependencies
部分
https://pub.dev/packages/built_value_generator
你可以阅读官方文档 - https://dart.dev/tools/build_runner
在我的例子中,build_runner 过程是成功的,但没有生成 .g 文件。在开始看到 .g 文件之前,我必须重新启动 IDE (vscode)。
通过终端尝试这样的事情:
- 通过命令删除之前生成的文件:find ./ -name '*.g.dart' -delete
- 然后:flutter packages pub 运行 build_runner watch —delete-conflicting-outputs