如何使用包含git子模块的大型flutter项目

uxhixvfz  于 2023-02-05  发布在  Flutter
关注(0)|答案(1)|浏览(171)

总的来说,我知道如何使用git子模块和递归克隆和拉取。但是自从我搬到flutter后,很多问题都被提出来了,并且找不到明确的答案,如果你们能帮忙的话:

  • 子模块也应该是Flutter项目吗?
  • 它有自己的pubspec.yml吗?如果有,我应该总是确保它们与版本一致吗?如果在子模块和父模块中使用相同的包怎么办?
  • flutter pub是否在每个模块中都是必需的?或者在顶层运行它会递归地执行它?
  • 子模块是否必须与lib/main. dart等具有相同的结构?不能只作为目录使用?lib/main. dart可以被删除吗?
  • 在我的例子中,子模块不是子应用,只是包含了多个应用之间的公共代码,但是flutter项目本身就是应用,对吗?会不会有冲突?
  • 我知道flutter包,但在我的例子中,我更喜欢使用子模块

先谢了!

kfgdxczn

kfgdxczn1#

长话短说,模块化Flutter项目的“简单方法”并不多。
如果你想做“vanilla”,你应该把代码的模块导出为库,并把它作为依赖项添加到你的项目中。
You can find a example here
如果你想以一种更工业化的方式来做,有一个叫做melos的包可以帮助你构建和管理你的模块,如果你有一个很大的代码库,这是非常有用的。
这些“模块”的行为与外部库完全相同:

  • 在模块中,您可以定义标记,在主应用程序中,您可以指定要使用的标记。
  • 如果您在模块和主应用中使用Provider这样的库,则在模块和主应用中使用不同版本时可能会发生依赖项冲突(仅当存在主要版本差异时才会发生)。
  • 您的子模块将是一个库,这意味着您将没有任何main.dart,但它将是一个具有专用pubspec.yaml的Flutter项目。

如果您有Java/Kotlin/Android开发人员的背景,您可能知道在原生Android项目中,由于gradle,子模块的管理是可能的。由于Flutter的设计,不可能有相同的“原生”行为。

相关问题