# jm-micro-cli **Repository Path**: hhhh-ddd/jm-micro-cli ## Basic Information - **Project Name**: jm-micro-cli - **Description**: 一个用于管理微前端子应用的命令行工具,提供交互式的子应用管理功能。 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-04 - **Last Updated**: 2025-12-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 微前端子应用管理工具 一个用于管理微前端子应用的命令行工具,提供交互式的子应用管理功能。 ## 功能特性 ### 基础功能 - ⚙️ **创建配置文件模板**:生成 micro-app-config.json 配置模板 - 🔧 **根据配置文件添加子应用**:批量添加微应用(支持多个配置) - 🚀 **启动应用**:统一启动入口,支持启动主应用和子应用(单个或多个) - 🔍 **扫描已配置的子应用**:查看已配置的子应用列表 - 📋 **查看列表**:查看所有已添加的子应用及其信息 - 🔄 **更新子应用**:更新单个子应用到最新版本 - 📥 **初始化子应用**:为子应用安装依赖 ### Git Submodule 批量操作 - 📦 **添加子应用**:通过交互式命令添加 git submodule - 🗑️ **删除子应用**:安全删除子应用(包括 git submodule) - 🔧 **初始化/更新所有 submodules**:执行 `git submodule update --init --recursive` - ⬇️ **拉取所有 submodules 最新代码(支持切换分支)**:合并功能,支持先切换分支再拉取代码,如果子应用未初始化会自动初始化 - 📊 **查看所有 submodules 分支状态**:查看所有子应用的当前分支和最后提交 ## 使用方法 ### 基本使用 ```bash # 通过 npm script 运行(推荐) pnpm micro # 或直接运行 node scripts/bin/micro-cli.js ``` **注意**:以下 git submodule 命令现在可以通过交互式工具执行: ```bash # 这些命令已集成到工具中,无需手动执行 # 初始化更新子应用 -> 选择 "🔧 初始化/更新所有 submodules" git submodule update --init --recursive # 拉取所有子应用最新代码(支持切换分支)-> 选择 "⬇️ 拉取所有 submodules 最新代码(支持切换分支)" # 该功能会先检查子应用是否已初始化,如果未初始化会自动初始化 # 支持先切换分支再拉取代码,或直接拉取当前分支的最新代码 git submodule foreach git pull ``` ### 功能说明 #### 1. 启动应用(推荐)✨ 选择 "🚀 启动应用" 后,工具会引导你: 1. **Git 环境检查** - 自动检查 Git 是否安装 - 检查当前目录是否为 Git 仓库 - 检查 Submodule 配置是否正常 2. **询问是否启动主应用** - 直接回车默认为"是" - 如果选择是,启动主应用 - 如果选择否,跳过主应用启动 3. **询问是否启动子应用** - 直接回车默认为"是" - 如果选择是,显示子应用列表供勾选 - 如果选择否,直接启动主应用(如果已选择) 4. **勾选要启动的子应用** - 显示所有可用的子应用列表,每个子应用会显示当前分支名(灰色显示) - 支持多选,可以同时启动多个子应用 - 如果子应用未初始化,会自动提示并初始化 5. **自动启动所有选择的应用** - 启动时会显示每个应用及其分支名(如果是子应用) **优势:** - 流程清晰,先主应用后子应用 - 支持灵活组合:只启动主应用、只启动子应用、或同时启动 - 所有应用在一个终端并行运行 - 自动显示分支信息,方便确认当前代码版本 - 自动检查并初始化未初始化的子应用 #### 2. 查看子应用列表 显示所有已添加的子应用,包括: - 子应用名称 - Git 仓库地址 - 启动命令(如果有 package.json) #### 3. 更新子应用 可以选择: - 更新单个子应用 - 更新所有子应用 #### 4. 初始化子应用 为选定的子应用安装依赖(执行 `pnpm install`)。 #### 5. Git Submodule 批量操作 ##### 5.1 添加子应用 选择 "📦 添加子应用(git submodule)" 后,工具会引导你: 1. 输入 Git 仓库地址(例如:`https://git.transsion.com/marketing/web/mkt-product-md-web.git`) 2. 输入子应用名称(将作为目录名,例如:`mkt-product-md-web`) 3. 选择是否强制覆盖(如果子应用已存在) ##### 5.2 删除子应用 安全删除子应用,包括: - 从 git submodule 中移除 - 从工作区删除 - 提示手动清理 .git/modules 目录 ##### 5.3 初始化/更新所有 submodules 选择 "🔧 初始化/更新所有 submodules" 后: - 执行 `git submodule update --init --recursive` - 适用于首次克隆项目或需要初始化所有子模块的场景 ##### 5.4 拉取所有 submodules 最新代码(支持切换分支) 选择 "⬇️ 拉取所有 submodules 最新代码(支持切换分支)" 后: 1. **自动检查子应用状态** - 如果子应用未初始化或目录为空,会提示并自动初始化 - 确保所有子应用都已正确初始化 2. **选择是否切换分支** - 直接回车默认为"否" - 如果选择是,输入目标分支名称(如:dev, master) - 如果选择否,直接拉取当前分支的最新代码 3. **执行操作** - 如果选择了切换分支,会先切换所有子应用到指定分支 - 然后拉取所有子应用的最新代码 **优势**: - 合并了切换分支和拉取代码两个功能,操作更便捷 - 自动检测并初始化未初始化的子应用 - 支持只拉取代码或先切换分支再拉取 ##### 5.6 查看所有 submodules 分支状态 选择 "📊 查看所有 submodules 分支状态" 后: - 显示所有子应用的当前分支 - 显示每个子应用的最后一次提交信息 - 用于确认切换分支操作是否成功 ## 示例 ### 启动应用(推荐) ```bash $ pnpm micro 🚀 微前端子应用管理工具 ? 请选择操作: 🚀 启动应用 ? 是否启动主应用? Yes ? 是否启动子应用? Yes ? 请选择要启动的子应用(可多选): ◯ mkt-campaign-web (dev) ◯ mkt-product-md-web (dev) ◯ mkt-account-web (dev) ◯ mkt-my-web (dev) 准备启动 2 个应用: - 主应用 - mkt-product-md-web [dev] 启动的应用: - 主应用 - mkt-product-md-web [dev] ``` ### Git Submodule 批量操作示例 #### 添加子应用 ```bash $ pnpm micro 🚀 微前端子应用管理工具 ? 请选择操作: 📦 添加子应用(git submodule) ? 请输入子应用的 Git 仓库地址: https://git.transsion.com/marketing/web/mkt-product-md-web.git ? 请输入子应用名称(将作为目录名): mkt-product-md-web ? 如果子应用已存在,是否强制覆盖? No ℹ 正在添加子应用 mkt-product-md-web... ✓ 子应用添加成功! ``` #### 初始化/更新所有子应用 ```bash $ pnpm micro 🚀 微前端子应用管理工具 ? 请选择操作: 🔧 初始化/更新所有 submodules ? 确定要初始化/更新所有 git submodule 吗? Yes ℹ 正在初始化子应用... 请稍候... Submodule 'micros/mkt-my-web' registered for path 'micros/mkt-my-web' Cloning into 'D:/dcr-manager-web/micros/mkt-my-web'... ✓ 所有子应用初始化/更新成功! ``` #### 拉取所有子应用最新代码(支持切换分支) ```bash $ pnpm micro 🚀 微前端子应用管理工具 ? 请选择操作: ⬇️ 拉取所有 submodules 最新代码(支持切换分支) ℹ 拉取所有子应用的最新代码... ℹ 找到 1 个子应用: mkt-my-web ? 是否先初始化未初始化的子应用?(直接回车默认为是) Yes ℹ 正在初始化子应用... 请稍候... ✓ 子应用初始化成功! ? 是否先切换子应用的分支?(直接回车默认为否) Yes ? 请输入要切换的分支名称(如: dev, master, feature/xxx): dev ? 确定要切换所有子应用到分支 "dev" 并拉取最新代码吗? Yes ℹ 正在切换所有子应用到分支 "dev"... 请稍候... ✓ 所有子应用已切换到分支 "dev"! ℹ 正在拉取所有子应用的最新代码... 请稍候... Entering 'micros/mkt-my-web' Already up to date. ✓ 所有子应用代码更新成功! ✓ 所有子应用已切换到分支 "dev" 并拉取最新代码 ``` #### 查看所有 submodules 分支状态 ```bash $ pnpm micro 🚀 微前端子应用管理工具 ? 请选择操作: 📊 查看所有 submodules 分支状态 ℹ 查看所有子应用的分支状态... ℹ 找到 2 个子应用: 📦 mkt-my-web 分支: dev 提交: a1b2c3d Fix: update component 📦 mkt-product-web 分支: feature/new-feature 提交: e4f5g6h Feat: add new feature 💡 提示: 如需切换分支并拉取代码,请选择 "⬇️ 拉取所有 submodules 最新代码(支持切换分支)" ``` ### 根据配置文件批量添加子应用 ```bash $ pnpm micro 🚀 微前端子应用管理工具 ? 请选择操作: 🔧 根据配置文件添加子应用 ℹ 根据配置文件添加子应用 ℹ 已配置的子应用: mkt-old-app ℹ 找到 2 个子应用配置 ⚠ 以下子应用已存在,将跳过: 1. mkt-old-app - 旧的子应用 ℹ 待添加的子应用: 1. mkt-my-web - 账户管理子应用 URL: http://localhost:8083/mkt-my-web/ 路由: /customer-shop/customer/account-management ? 确定要添加这 1 个子应用配置吗? Yes ℹ 正在添加: mkt-my-web ✓ mkt-my-web 配置添加成功 ========== 添加结果汇总 ========== ✓ 成功添加 1 个: mkt-my-web ℹ 已跳过 1 个已存在的应用 ================================ ``` ## 注意事项 1. **依赖要求**: - 需要安装 `inquirer` 和 `chalk` 依赖 - 确保已安装 `pnpm` 包管理器 2. **Git 要求**: - 确保项目已初始化 git 仓库 - 添加子应用需要 git 权限 3. **子应用要求**: - 子应用需要有 `package.json` 文件才能启动 - 启动命令需要在 `package.json` 的 `scripts.dev` 或 `scripts.start` 中定义 ## 故障排除 ### 问题:无法添加子应用 **解决方案**: - 检查 Git 仓库地址是否正确 - 确认有访问该仓库的权限 - 检查子应用名称是否符合规范(只能包含小写字母、数字和连字符) ### 问题:无法启动子应用 **解决方案**: - 确认子应用目录下有 `package.json` 文件 - 检查 `package.json` 中是否定义了 `dev` 或 `start` 脚本 - 确认已安装子应用的依赖(使用初始化功能) ### 问题:更新子应用失败 **解决方案**: - 检查网络连接 - 确认有访问 Git 仓库的权限 - 检查子应用是否有未提交的更改