Melos 发布pub.dev

确保登录

置登录状态

按照提示操作,先运行:

bash

bash 复制代码
dart pub logout

这会清除当前的(损坏的)登录信息。

然后再重新登录:

bash

bash 复制代码
dart pub login

这一次它应该会在浏览器中打开 Google 登录页面,完成登录后,回到终端应该显示类似:

Successfully authorized.

然后你就可以继续发布了:

手动发布

1. 进入一个子包,比如:
复制代码
bash
bash 复制代码
cd packages/xxf_demo
2. 手动发布:

bash

bash 复制代码
dart pub publish

这个命令执行后,如果你登录成功,会看到一个提示:

bash 复制代码
Do you want to publish xxf_demo 0.0.2 (y/N)?

你输入 y 才会真正上传。

🧰 Melos 全套实用教程(Flutter Monorepo 管理神器)

🚀 目录:

  1. 什么是 Melos?适合哪些项目?

  2. 安装与初始化

  3. 项目结构推荐

  4. melos.yaml 配置详解

  5. 常用命令讲解(bootstrap、run、exec、publish、version)

  6. 发布多个 package 到 pub.dev(自动识别改动 + 顺序)

  7. 高级技巧(版本管理 / script / ignore / Git hooks)

  8. 常见问题解答


1️⃣ 什么是 Melos?

Melos 是 Dart/Flutter 官方推荐的 Monorepo 管理工具,适合你有如下需求:

✅ 管理多个 Flutter/Dart 包(如 utils、plugin、theme)

✅ 模块间有依赖关系

✅ 想一次安装依赖、一次测试、一次发布多个模块

✅ 想提高团队协作效率(每人写自己模块)


2️⃣ 安装与初始化

✅ 安装:

复制代码
bash 复制代码
dart pub global activate melos

确保你把 global package 加进了 PATH:

bash 复制代码
export PATH="$PATH":"$HOME/.pub-cache/bin"

✅ 初始化项目

在项目根目录添加:

bash 复制代码
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
XML 复制代码
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
bash 复制代码
melos bootstrap

类似于 yarn install,自动安装所有模块依赖,并把本地依赖 link 起来。


✅ 执行统一命令(如测试、分析、构建)

bash

bash 复制代码
melos run analyze

会在每个 package 执行对应命令(来自 melos.yaml 的 scripts

也可指定某个模块:

bash

bash 复制代码
melos run analyze --scope=my_utils

✅ 在每个模块执行任意命令

bash

bash 复制代码
melos exec -- flutter pub get

也可以:

bash

bash 复制代码
melos exec --scope="my_utils" -- dart pub publish --dry-run

6️⃣ 发布到 pub.dev(批量)

1. 检查哪些模块有更新:

bash

bash 复制代码
melos publish --dry-run

会列出所有版本有变动的包,以及顺序。

2. 发布所有模块:

复制代码
bash
bash 复制代码
melos publish --yes

会跳过未修改的包,自动按依赖顺序发布。


7️⃣ 高级技巧

✅ 自动 bump 版本号并生成 changelog

bash

bash 复制代码
melos version

支持参数:

bash

bash 复制代码
melos version --no-git-tag-version melos version --yes

✅ 统一定义脚本

复制代码
yaml
bash 复制代码
scripts: test: run: "flutter test" format: run: "dart format ." pub_publish: run: "dart pub publish --dry-run"

调用:

复制代码
bash
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 实现

相关推荐
阅文作家助手开发团队_山神11 小时前
第三章: Flutter-quill 数据格式Delta
flutter
阅文作家助手开发团队_山神11 小时前
第二章:Document 模块与 DOM 树详解
flutter
程序员老刘11 小时前
20%的选择决定80%的成败
flutter·架构·客户端
肥肥呀呀呀20 小时前
flutter 中Stack 使用clipBehavior: Clip.none, 超出的部分无法响应所有事件
flutter
SY.ZHOU20 小时前
Flutter如何支持原生View
flutter
sg_knight20 小时前
Flutter嵌入式开发实战 ——从树莓派到智能家居控制面板,打造工业级交互终端
android·前端·flutter·ios·智能家居·跨平台
张风捷特烈1 天前
每日一题 Flutter#4 | 说说组件 build 函数的作用
android·flutter·面试
小镇梦想家2 天前
鸿蒙NEXT-Flutter(2)
flutter
至善迎风2 天前
一键更新依赖全指南:Flutter、Node.js、Kotlin、Java、Go、Python 等主流语言全覆盖
java·flutter·node.js
椒盐煎蛋2 天前
新建的Flutter插件工程,无法索引andorid工程代码;无法索引io.flutter包下代码。
flutter