在现代 Flutter/Dart 开发中,许多项目采用 Monorepo(单体仓库) 结构管理多个相互依赖的包。然而,随着包数量增加,手动管理版本、依赖、发布等任务变得繁琐。
Melos 是一个专为 Dart/Flutter 设计的 Monorepo 管理工具,它提供自动化脚本、依赖管理、批量执行命令等功能,显著提升开发效率。本文将介绍 Melos 的核心功能,并通过具体示例展示其用法。
1. 自动生成版本和更新日志
在团队协作中,遵循 语义化版本(SemVer) 和规范的提交信息(Conventional Commits)非常重要。Melos 可以自动分析提交记录,生成版本号及更新日志。
示例配置
在 melos.yaml
中启用 conventionalCommits
:
scripts:
version:
conventionalCommits: true # 遵循 Conventional Commits
changelog: true # 生成 CHANGELOG.md
usePubspecOverrides: false
执行命令
melos version
效果:
- 根据
feat:
,fix:
,BREAKING CHANGE:
等提交信息,自动升级MAJOR.MINOR.PATCH
版本。 - 生成
CHANGELOG.md
,按提交类型分类(如 Features、Bug Fixes)。
2. 自动发布软件包到 pub.dev
当多个包需要发布时,手动逐个执行 flutter pub publish
非常麻烦。Melos 可一键发布所有变更的包。
示例配置
scripts:
publish:
run: melos exec -- "flutter pub publish --dry-run" # 测试发布
# 正式发布时移除 --dry-run
执行发布
melos publish
效果:
- 检查所有包,仅发布有更新的包。
- 可结合
melos version
先更新版本再发布。
3. 本地软件包的链接和安装
在 Monorepo 中,多个包可能互相依赖。Melos 的 bootstrap
命令可自动链接本地包,避免频繁发布到 pub.dev。
执行命令
melos bootstrap
效果:
- 解析所有
pubspec.yaml
依赖,优先使用本地路径(通过dependency_overrides
实现)。 - 例如,
core_utils
依赖本地logger
,Melos 会直接链接到../logger
而非远程版本。
4. 批量执行命令(测试、格式化等)
在多个包中运行相同命令(如测试、代码格式化)时,Melos 可以并行执行,提高效率。
示例命令
# 在所有包中运行测试
melos run test
# 在所有包中执行代码格式化
melos exec -- dart format .
# 仅针对特定包(如所有 `core_*` 开头的包)
melos exec --scope="core_*" -- flutter pub upgrade
效果:
- 并行执行命令,输出统一显示。
- 支持
--scope
和--ignore
过滤包。
5. 列出本地包及依赖关系
Monorepo 项目通常包含多个包,Melos 可以快速列出所有包及其依赖关系。
示例命令
# 列出所有包
melos list
# 查看依赖关系图(DAG)
melos list --graph
效果:
melos list
输出:app/ core_utils/ logger/
melos list --graph
输出依赖关系:app -> core_utils core_utils -> logger
完整 melos.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 工作流!