从零开始:用 Melos 搭建 Flutter 模块化项目

在 Flutter 开发中,随着项目规模的扩大,单体架构往往会变得难以维护。为了解决这一问题,我们引入了 Melos——一个强大的工具,用于管理包含多个包的 Dart/Flutter 仓库(Monorepo)。本文将带你从零开始,配置一个支持 Android、iOS 和 Web 平台的 Melos 项目。


环境准备

在开始之前,请确保你的开发环境满足以下条件:

  • Flutter SDK:已安装并配置好环境变量(建议稳定版本)。
  • Melos:全局激活 Melos。
dart pub global activate melos
  • IDE:推荐使用 Android Studio 或 VS Code。

初始化 Melos 工作区

首先,我们需要创建项目的根目录并初始化 Melos。

  1. 创建项目文件夹
    打开终端,创建一个新目录并进入:

    mkdir hm-aimusic
    cd hm-aimusic
    
  2. 初始化 Melos
    运行以下命令初始化工作区:

    melos init
    

    系统会提示你输入项目名称(例如 hm_aimusic)和描述。完成后,根目录下会生成一个 melos.yaml 文件和一个基础的 pubspec.yaml

  3. 配置 melos.yaml
    打开 melos.yaml,我们需要定义包的搜索路径。编辑文件如下:

    name: hm_aimusic
    
    packages:
      - apps/**
      - packages/**
    
    • apps/**:用于存放可运行的应用程序(App)。
    • packages/**:用于存放共享的业务逻辑或 UI 组件库。

创建 Application

接下来,我们在 apps 目录下创建一个 Flutter 应用程序。由于我们只需要支持 Android、iOS 和 Web,可以通过指定平台参数来减少不必要的文件生成。

在终端中执行以下命令:

flutter create -t app --platforms=android,ios,web apps/main_app

注意:如果你的 Flutter 版本较老,不支持 --platforms 参数,可以先使用 flutter create apps/main_app 创建完整项目,然后手动删除 windowslinuxmacos 文件夹。

创建完成后,你的目录结构应如下所示:

hm-aimusic/
├── apps/
│   └── main_app/      # 包含 android, ios, web 文件夹
├── melos.yaml
└── pubspec.yaml

创建 Package

模块化开发的核心在于将功能拆分为独立的包。我们在 packages 目录下创建一个名为 core 的基础库。

执行以下命令:

flutter create --template=package packages/core
  • --template=package:表示这是一个纯 Dart/Flutter 库,不包含平台特定的代码。

此时,目录结构更新为:

hm-aimusic/
├── apps/
│   └── main_app/
├── packages/
│   └── core/          # 包含 lib 文件夹
├── melos.yaml
└── pubspec.yaml

关联依赖

为了让 main_app 能够使用 core 包中的代码,我们需要在 main_apppubspec.yaml 中添加依赖。

打开 apps/main_app/pubspec.yaml,在 dependencies 部分添加:

dependencies:
  flutter:
    sdk: flutter
  core: # 引用本地包
    path: ../../packages/core

引导项目

依赖配置完成后,我们需要让 Melos 处理这些依赖关系并链接包。

在项目根目录下运行:

melos bootstrap

该命令会:

  1. 扫描 melos.yaml 中定义的所有包。
  2. 安装每个包的依赖。
  3. 将本地包(如 core)链接到引用它们的应用(如 main_app)。

IDE 配置

打开 Android Studio 或 VS Code,导入根目录 hm-aimusic

  1. 配置 Dart SDK
    如果出现 “Dart SDK is not configured” 的提示,请按照以下步骤操作:

    • 点击 “Open Dart settings”。
    • 勾选 “Enable Dart”。
    • 设置 Dart SDK 路径为 <你的Flutter安装目录>/bin/cache/dart-sdk
  2. 运行项目
    进入 apps/main_app,你应该能够正常运行项目到 Android、iOS 或 Web 平台。


总结

通过以上步骤,我们成功搭建了一个基于 Melos 的 Flutter 模块化项目。这种结构不仅有助于代码的复用和维护,还能提高团队协作效率。未来,你可以继续在 packages 目录下创建更多功能模块,如 networkui_components 等,逐步完善你的应用架构。

现在,你已经准备好开始开发了!

更多推荐