问题
大多数情况下,当你创建一个 flutter 项目。你使用一个包。这个项目由一个 pubspec.yaml,lib 文件夹组成。您将所有的特性和实用程序放在同一个包中。但也有一些项目将它们的特性和实用程序分解成多个包。这有助于提高关注点分离,并允许团队开源他们的一些软件包。下面是一个多包项目的示意图:
在这里,我们将项目分为三个层次。第一层是根项目,它包含适用于项目中所有不同包的通用配置。第二层拥有独立的功能包,它们不相互依赖。第三层由多个功能包中使用的实用工具包组成。我不会深入探讨如何创建或结构一个多包 flutter 项目。本文将着重于解决一个典型的多包 flutter 项目所面临的特殊挑战。
在一个简单的程序包中,运行下面的任务是非常简单的:
- flutter pub get
- flutter test
- flutter analyze
- flutter pub run build_runner build --delete-conflicting-outputs
但是在一个多包的 flutter 项目中运行相同的任务是具有挑战性的,因为你需要在项目中的每个包中运行这些任务,并在任务完成后给出总结结果。现在我们知道挑战是什么了。让我们来讨论一下解决这个问题的可能方法。
解决方案
有两种可能的解决方案来解决这个问题。让我们看看第一个:
- 为各种任务编写 bash 脚本
这绝对是一个解决方案,但不是一个明智的解决方案。您需要首先编写一个脚本,找出项目中的所有包,并在其中运行上述任务之一。您还需要确保以漂亮的格式显示输出,以使内容具有可读性。如果您更喜欢 GUI,那么您需要在 IDE 中创建某种配置,以便通过 GUI 运行脚本
- 将 Melos 整合到你的项目中
这是一个比我强烈推荐的第一个方案更聪明的解决方案。因此,让我们详细讨论什么是 Melos,以及如何将其集成到您的多包项目中
Melos介绍
Melos 是一个 CLI 工具,用于管理多个包的 flutter/飞镖项目。
Melos 是由一个著名的小组在 flutter 社区即 invertase。你可以在他们的网站上阅读关于 Melos 的详细信息,但是这里有一个 Melos 提供的特性的快速列表:
- Automatic versioning & changelog generation. 自动版本控制和更新日志生成
- Automated publishing of packages to 将包自动发布到 pub.dev.
- Local package linking and installation. 本地包的链接和安装
- Executing simultaneous commands across packages. 跨包执行同步命令
- Listing of local packages & their dependencies. 本地包及其依赖项的列表
现在让我们看看如何使用 Melos 执行上述所有任务。
- 注意: 如果你想在实践中学习,请下载入门课程。还有另一个分支,您可以在其中找到项目的最终版本。
安装 Melos
让我们先安装 Melos。我假设您已经安装了 Flutter SDK,并将 Flutter 和 Dart 路径设置为 bash_profile
。在终端中运行以下命令:
dart pub global activate melos
项目配置文件
现在创建一个名为 melos.yaml 的文件,并将以下内容复制到其中:
name: melos_demo
packages:
- apps/*
- plugins/*
ignore:
# e.g. ignore example apps
- "plugins/**/example"
scripts:
clean: melos exec -- flutter clean
pub-get: melos exec -- flutter pub get
pub-upgrade: melos exec -- flutter pub upgrade
pub-upgrade_dependencies: melos exec -- dart pub upgrade --major-versions
clean-gen-code:
exec: flutter pub run build_runner clean
select-package:
flutter: true
gen-code:
exec: flutter pub run build_runner build --delete-conflicting-outputs
select-package:
flutter: true
让我们理解一下上面的脚本: a) name : 你必须给出项目的名称。您可以在 root 项目的 pubspec.yaml 中找到它. b) packages : 这个列表应该包含到项目中单个软件包的路径. 可以使用 glob 模式展开格式定义每个路径.
Melos 生成快捷命令
现在,从根项目中在终端中运行以下命令,将所有本地包链接在一起,并更新依赖关系,即 flutter pub get。
melos bootstrap
图形用户界面选项
如果您不希望通过终端执行这些命令,并希望使用 GUI 运行它们,那么 Melos 可以满足您的要求。添加所有命令后,可以再次运行引导程序命令。这将生成一些配置,你可以看到一些图形用户界面选项如下:
现在您可以执行所有这些命令,而无需在终端中键入任何内容。
你可以在这里阅读为什么你需要引导 Melos。准确地说,这是在项目中设置 Melos 或执行项目清理时应该执行的重要命令之一。
Melos Clean
当您希望从项目中删除临时文件(构建工件、pub 文件等)时,可以执行此命令。下面是这个命令的样子:
melos clean
参考
你可以在 Melos 网站上学到更多的过滤选项和命令。
integrate_melos 分支是完成的代码