Melos 发布pub.dev
确保登录
置登录状态
按照提示操作,先运行:
bash
dart pub logout
这会清除当前的(损坏的)登录信息。
然后再重新登录:
bash
dart pub login
这一次它应该会在浏览器中打开 Google 登录页面,完成登录后,回到终端应该显示类似:
Successfully authorized.
然后你就可以继续发布了:
手动发布
1. 进入一个子包,比如:
bash
cd packages/xxf_demo
2. 手动发布:
bash
dart pub publish
这个命令执行后,如果你登录成功,会看到一个提示:
Do you want to publish xxf_demo 0.0.2 (y/N)?
你输入 y
才会真正上传。
🧰 Melos 全套实用教程(Flutter Monorepo 管理神器)
🚀 目录:
-
什么是 Melos?适合哪些项目?
-
安装与初始化
-
项目结构推荐
-
melos.yaml
配置详解 -
常用命令讲解(bootstrap、run、exec、publish、version)
-
发布多个 package 到 pub.dev(自动识别改动 + 顺序)
-
高级技巧(版本管理 / script / ignore / Git hooks)
-
常见问题解答
1️⃣ 什么是 Melos?
Melos 是 Dart/Flutter 官方推荐的 Monorepo 管理工具,适合你有如下需求:
✅ 管理多个 Flutter/Dart 包(如 utils、plugin、theme)
✅ 模块间有依赖关系
✅ 想一次安装依赖、一次测试、一次发布多个模块
✅ 想提高团队协作效率(每人写自己模块)
2️⃣ 安装与初始化
✅ 安装:
dart pub global activate melos
确保你把 global package 加进了 PATH:
export PATH="$PATH":"$HOME/.pub-cache/bin"
✅ 初始化项目
在项目根目录添加:
melos init
它会创建:
melos.yaml
3️⃣ 推荐项目结构
复制编辑
my_repo/
├── melos.yaml
├── packages/
│ ├── my_utils/
│ ├── my_theme/
├── plugins/
│ ├── my_plugin/
├── examples/
每个模块都是合法的 Flutter/Dart package。
4️⃣ melos.yaml 配置详解
yaml
name: demo
packages:- apps/*- packages/*
#ignore:
# - "**/build/**"
# - "**/example/**" # 不希望被识别为 package 的路径scripts:format:run: "dart format ."analyze:run: "flutter analyze"
-
name
:工程名 -
packages
:需要管理的模块路径(支持 glob) -
ignore
:排除的路径 -
scripts
:你定义的统一脚本命令(配合melos run
使用)
5️⃣ 常用命令详解
✅ 安装依赖(并自动链接本地依赖)
bash
melos bootstrap
类似于 yarn install
,自动安装所有模块依赖,并把本地依赖 link 起来。
✅ 执行统一命令(如测试、分析、构建)
bash
melos run analyze
会在每个 package 执行对应命令(来自 melos.yaml 的 scripts
)
也可指定某个模块:
bash
melos run analyze --scope=my_utils
✅ 在每个模块执行任意命令
bash
melos exec -- flutter pub get
也可以:
bash
melos exec --scope="my_utils" -- dart pub publish --dry-run
6️⃣ 发布到 pub.dev(批量)
1. 检查哪些模块有更新:
bash
melos publish --dry-run
会列出所有版本有变动的包,以及顺序。
2. 发布所有模块:
bash
melos publish --yes
会跳过未修改的包,自动按依赖顺序发布。
7️⃣ 高级技巧
✅ 自动 bump 版本号并生成 changelog
bash
melos version
支持参数:
bash
melos version --no-git-tag-version melos version --yes
✅ 统一定义脚本
yaml
scripts: test: run: "flutter test" format: run: "dart format ." pub_publish: run: "dart pub publish --dry-run"
调用:
bash
melos run pub_publish
8️⃣ 常见问题解答
问题 | 解答 |
---|---|
模块之间依赖怎么办? | Melos 自动 link 本地依赖(bootstrap) |
可以按模块单独发布吗? | 可以:cd package && dart pub publish 或使用 --scope |
支持私有包吗? | 支持配置私有 registry(pub.dev 镜像、内网) |
一定要 pubspec.yaml 吗? | 是的,每个 module 必须是合法 Dart package |
可以自动生成 changelog 吗? | 可以结合 conventional commits + melos version 实现 |