使用 Melos 高效管理 Flutter/Dart Monorepo 项目

在现代 Flutter/Dart 开发中,许多项目采用 Monorepo(单体仓库) 结构管理多个相互依赖的包。然而,随着包数量增加,手动管理版本、依赖、发布等任务变得繁琐。

Melos 是一个专为 Dart/Flutter 设计的 Monorepo 管理工具,它提供自动化脚本、依赖管理、批量执行命令等功能,显著提升开发效率。本文将介绍 Melos 的核心功能,并通过具体示例展示其用法。


1. 自动生成版本和更新日志

在团队协作中,遵循 语义化版本(SemVer) 和规范的提交信息(Conventional Commits)非常重要。Melos 可以自动分析提交记录,生成版本号及更新日志。

示例配置

melos.yaml 中启用 conventionalCommits

yaml 复制代码
scripts:
  version:
    conventionalCommits: true  # 遵循 Conventional Commits
    changelog: true           # 生成 CHANGELOG.md
    usePubspecOverrides: false

执行命令

bash 复制代码
melos version

效果

  • 根据 feat:, fix:, BREAKING CHANGE: 等提交信息,自动升级 MAJOR.MINOR.PATCH 版本。
  • 生成 CHANGELOG.md,按提交类型分类(如 Features、Bug Fixes)。

2. 自动发布软件包到 pub.dev

当多个包需要发布时,手动逐个执行 flutter pub publish 非常麻烦。Melos 可一键发布所有变更的包。

示例配置

yaml 复制代码
scripts:
  publish:
    run: melos exec -- "flutter pub publish --dry-run"  # 测试发布
    # 正式发布时移除 --dry-run

执行发布

bash 复制代码
melos publish

效果

  • 检查所有包,仅发布有更新的包。
  • 可结合 melos version 先更新版本再发布。

3. 本地软件包的链接和安装

在 Monorepo 中,多个包可能互相依赖。Melos 的 bootstrap 命令可自动链接本地包,避免频繁发布到 pub.dev。

执行命令

bash 复制代码
melos bootstrap

效果

  • 解析所有 pubspec.yaml 依赖,优先使用本地路径(通过 dependency_overrides 实现)。
  • 例如,core_utils 依赖本地 logger,Melos 会直接链接到 ../logger 而非远程版本。

4. 批量执行命令(测试、格式化等)

在多个包中运行相同命令(如测试、代码格式化)时,Melos 可以并行执行,提高效率。

示例命令

bash 复制代码
# 在所有包中运行测试
melos run test

# 在所有包中执行代码格式化
melos exec -- dart format .

# 仅针对特定包(如所有 `core_*` 开头的包)
melos exec --scope="core_*" -- flutter pub upgrade

效果

  • 并行执行命令,输出统一显示。
  • 支持 --scope--ignore 过滤包。

5. 列出本地包及依赖关系

Monorepo 项目通常包含多个包,Melos 可以快速列出所有包及其依赖关系。

示例命令

bash 复制代码
# 列出所有包
melos list

# 查看依赖关系图(DAG)
melos list --graph

效果

  • melos list 输出:

    复制代码
    app/
    core_utils/
    logger/
  • melos list --graph 输出依赖关系:

    复制代码
    app -> core_utils
    core_utils -> logger

完整 melos.yaml 配置示例

yaml 复制代码
name: my_flutter_monorepo
packages:
  - "packages/**"  # 包存放路径

scripts:
  bootstrap:
    run: melos bootstrap
  test:
    run: melos exec -- flutter test
  version:
    conventionalCommits: true
    changelog: true
  publish:
    run: melos exec -- flutter pub publish --dry-run

总结

Melos 为 Flutter/Dart Monorepo 项目提供了一套完整的工具链,能够:

自动化版本管理 (版本号、CHANGELOG)

一键发布多个包 (pub.dev)

智能管理本地依赖bootstrap

批量执行命令 (测试、格式化等)

可视化依赖关系melos list --graph

如果你的项目包含多个相互关联的包,Melos 可以大幅减少手动操作,让开发更高效!

🚀 立即尝试 Melos,优化你的 Monorepo 工作流!

相关推荐
键盘鼓手苏苏10 小时前
Flutter 三方库 p2plib 的鸿蒙化适配指南 - 实现高性能的端到端(P2P)加密通讯、支持分布式节点发现与去中心化数据流传输实战
flutter·harmonyos·鸿蒙·openharmony
加农炮手Jinx10 小时前
Flutter for OpenHarmony:postgrest 直接访问 PostgreSQL 数据库的 RESTful 客户端(Supabase 核心驱动) 深度解析与鸿蒙适配指南
数据库·flutter·华为·postgresql·restful·harmonyos·鸿蒙
加农炮手Jinx10 小时前
Flutter 组件 heart 适配鸿蒙 HarmonyOS 实战:分布式心跳监控,构建全场景保活检测与链路哨兵架构
flutter·harmonyos·鸿蒙·openharmony
钛态10 小时前
Flutter 三方库 http_mock_adapter — 赋能鸿蒙应用开发的高效率网络接口 Mock 与自动化测试注入引擎(适配鸿蒙 HarmonyOS Next ohos)
android·网络协议·flutter·http·华为·中间件·harmonyos
王码码203510 小时前
Flutter for OpenHarmony:Flutter 三方库 algoliasearch 毫秒级云端搜索体验(云原生搜索引擎)
android·前端·git·flutter·搜索引擎·云原生·harmonyos
王码码203510 小时前
Flutter 三方库 dns_client 的鸿蒙化适配指南 - 告别 DNS 劫持、探索 DNS-over-HTTPS (DoH) 技术、构建安全的鸿蒙网络请求环境
flutter·harmonyos·鸿蒙·openharmony·dns_client
键盘鼓手苏苏10 小时前
Flutter 组件 highlighter 适配鸿蒙 HarmonyOS 实战:高性能语法高亮,构建大规模代码分析与文本染色架构
flutter·harmonyos·鸿蒙·openharmony
国医中兴10 小时前
Flutter 三方库 langchain_google 的鸿蒙化适配指南 - 链接 Gemini 智慧中枢、LangChain AI 实战、鸿蒙级智能应用专家
flutter·langchain·harmonyos
左手厨刀右手茼蒿10 小时前
Flutter for OpenHarmony: Flutter 三方库 shamsi_date 助力鸿蒙应用精准适配波斯历法(中东出海必备)
android·flutter·ui·华为·自动化·harmonyos
雷帝木木10 小时前
Flutter 三方库 http_client_interceptor 的鸿蒙化适配指南 - 实现原生 HttpClient 的全量请求拦截、支持端侧动态 Headers 注入与网络流量审计实战
flutter·harmonyos·鸿蒙·openharmony·http_client_interceptor