我应该将 Flutter/Dart 中生成的代码提交到 VCS

Jam*_*ace 8 git code-generation dart flutter

我正在使用 Flutter 的 Retrofit ( https://pub.dev/packages/retrofit ) 和 Json Serialized ( https://pub.dev/packages/json_serializing ) 库,它们都会创建生成的代码文件,这些文件最终会出现在其他文件中的源代码。生成的x.g.dart文件是否应该提交到 VCS 中?

在正常的 Android/Java 开发中,生成的文件会进入您不提交的特殊 gen/out/build 文件夹,并且 IDE 通常非常擅长隐藏这些文件。但由于 Flutter 在源代码中生成它们,我不知道如何处理它们。

Ben*_*rth 10

TLDR: flutter 工具对此还不够先进。今天解决这个问题会给您的项目增加更多的复杂性。一般来说,提交源代码是一个有争议的观点,请参阅我应该将生成的代码存储在源代码管理中吗?但是对于 Flutter 具体而言,它非常赞成将生成的源代码文件保留在 git 中。

  • 目前的做法:开发 flutter 插件包 ( video_player ) 的 Google 开发人员已将生成的文件提交到他们的存储库。
  • 工具限制: flutter run似乎不支持在编译/构建时运行 codegen,因此您要求用户在复制存储库、编写脚本并要求用户执行此操作时手动运行代码生成(并使 IDE 支持更糟/乏味),或设置客户端或服务器端 Git 挂钩。这些都是复杂的,实际上是为了解决什么问题呢?事实上,在其他生态系统中,您不提交生成的文件?
    • 导致额外的配置:您可能会添加更多的配置工作(以及所需的技能)来正确设置 IDE。当然,优秀的开发人员可以通过将 Android Studio 配置放在 git 存储库中来共享他们的配置,但 Flutter 开发人员可能希望能够运行flutter run.
  • 约定优于配置:开始参与您的项目的开发人员是否需要手动运行代码生成或使用您当时使用的特定 IDE?或者了解如何配置他们选择的 IDE 来启动应用程序?在这种情况下,我们会增加从事该项目的开发人员的开销。力求简单,不仅是为了您,也是为了其他人。
  • 最低公分母输出: Flutter 与 Android / Gradle(或其他生态系统)不同,我们不应该试图以获取最低公分母输出为代价来使事物保持一致(标准化)。Flutter 没有flutter syncIDE 在启动时自动运行的命令,因此无法自动运行此代码生成。

现有讨论: Flutter 上有一个关于改善代码生成体验的讨论(https://github.com/flutter/flutter/issues/63323)。提交生成的文件只是功能的一个小方面。


rav*_*ker -4

一般情况下最好不要提交生成的文件。正如其本身推荐的那样build_runner。这是该包的源代码控制部分的链接。

此外,它还提到了两件事需要考虑。

  1. 如果不同,特定建筑商的建议应取代这些建议。
  2. 在某些情况下,生成的文件可能会导致“已存在”警告。我自己已经多次看到过这种情况。