確保登錄
置登錄狀態
按照提示操作,先運行:
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 實現 |