# Conti Retail App —— 根工程(Pub Workspace + Melos) # # 约定来源:conti-docs/01-project-structure.md # 注意:Melos 8 不再使用独立的 melos.yaml,配置全部内联在本文件的 melos: 段。 # 每个子包必须写 resolution: workspace,否则不会被纳入统一解析。 name: conti_retail_app publish_to: none environment: sdk: ^3.12.0 # --------------------------------------------------------------------------- # 工作区成员。新增包时必须同步加到这里,否则 melos bootstrap 看不到它。 # 依赖方向规则(01 依赖约束,编译期强制): # feature_* → core_* / native_* (feature 之间禁止互相依赖) # core_* → native_* / core_foundation (core_* 之间仅允许下列三条例外) # core_network → core_auth # core_router → core_auth # core_webview → core_auth # native_* → 只依赖 Flutter SDK 和 Pigeon 产物,不依赖仓库内任何包 # --------------------------------------------------------------------------- workspace: - app - packages/core_foundation - packages/core_logging - packages/core_analytics - packages/core_storage - packages/core_auth - packages/core_network - packages/core_ui - packages/core_router - packages/core_webview - packages/feature_auth - packages/feature_home - packages/native_scan - packages/native_scan/example dev_dependencies: melos: ^8.2.2 melos: scripts: analyze: description: 静态分析。--fatal-infos 不可去掉,否则 info 级别的 lint 等于没配。 run: melos exec --fail-fast -- flutter analyze --fatal-infos format: description: 校验格式(page_width 由根 analysis_options.yaml 的 formatter 段控制)。 run: melos exec -- dart format --set-exit-if-changed . test: description: 跑所有带 test/ 目录的包。 run: melos exec --dir-exists=test --fail-fast -- flutter test --coverage coverage: description: 合并各包 lcov 并检查 60% 门禁。 run: dart pub global run coverde value -i coverage/lcov.info --min-coverage 60 gen: description: 代码生成(riverpod / drift / json_serializable)。 run: melos exec --depends-on=build_runner -- dart run build_runner build --delete-conflicting-outputs gen:watch: description: 开发期常驻的增量代码生成。 run: melos exec --depends-on=build_runner -- dart run build_runner watch --delete-conflicting-outputs gen:pigeon: description: 生成 native_* 的跨语言接口。产物必须提交到 git。 run: melos exec --scope="native_*" -- dart run pigeon --input pigeons/scan_api.dart