npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

generator-mico-cli

v0.2.32

Published

Yeoman generator for Mico CLI projects

Readme

Mico CLI Generator

用于搭建基于 TypeScript 的 Node.js CLI 项目的 Yeoman 生成器。

文档索引

项目总览与设计

| 文档 | 说明 | |---|---| | docs/mico-cli.md | mico CLI 整体能力、命令清单(create / list / doctor / --verbose / --dry-run)与子进程调用约定 | | docs/architecture.md | 项目架构、模块职责、关键约定、依赖关系 | | docs/generators.md | 各生成器的 prompt / 模板变量 / 联动修改细节(生成器之间的协作总览) | | docs/configuration.md | .micorc / .micorc.json 配置字段、加载顺序与默认值 | | docs/testing.md | Vitest + yeoman-test 测试体系、目录结构与 Mock 策略 | | docs/scripts.md | sync:subapp-react-templateverify:micro-react 辅助脚本 |

各生成器使用说明(按生成器拆分,建议先于代码改动阅读)

| 生成器 | 使用说明 | 仓库内就近说明 | |---|---|---| | micro-react(qiankun Monorepo 基座) | docs/micro-react-generator.md | generators/micro-react/README.md | | subapp-react(在已有 Monorepo 中新增 React 子应用) | docs/subapp-react-generator.md | generators/subapp-react/README.md | | h5-react(Umi 4 H5 Monorepo 基座 + 联动 subapp-h5) | docs/h5-react-generator.md | —(模板内置 README,由生成器写入目标项目根目录) | | subapp-h5(在 H5 Monorepo 中新增 Umi 子应用) | docs/subapp-h5-generator.md | —(无独立 README,约定见上文与 templates/.cursor/rules/) | | subapp-umd(UMD 组件包,<script> 加载场景) | —(详见本 README 「UMD 组件包生成器」一节) | generators/subapp-umd/README.md |

要求

  • Node >= 18

安装和使用

pnpm install -g generator-mico-cli

包装器 CLI

全局安装后,mico 命令可用于运行内置的 Yeoman 生成器。

mico create subapp-react

列出所有可用的生成器:

mico list

使用详细输出模式(显示文件处理过程):

mico create micro-react --verbose

预览模式(只显示将创建的文件,不实际创建):

mico create micro-react --dry-run

检查环境依赖:

mico doctor

执行配置任务(如配置自托管 Multica Desktop):

mico setup multica-desktop

详见下文 Multica Desktop 自托管配置

配置文件

可以在项目目录或用户主目录创建 .micorc.micorc.json 文件来预设默认值。

配置查找顺序:

  1. 当前目录(或 monorepo 根目录)的 .micorc / .micorc.json
  2. 用户主目录的 .micorc / .micorc.json

完整字段列表

{
  "projectName": "my-app",
  "appId": "portal_dev",
  "packageScope": "@my-company",
  "cdnPrefix": "portal",
  "author": "Team <[email protected]>",
  "initialSubAppName": "app",
  "initialSubAppDevPort": "8000",
  "defaultSubappName": "subapp",
  "devPort": "8010",
  "defaultUmdName": "my-widget",
  "umdDevPort": "9100"
}

| 字段 | 类型 | 适用生成器 | 说明 | 默认值 | |------|------|-----------|------|--------| | projectName | string | micro-react、h5-react | 项目名称 | 当前目录名 | | appId | string | micro-react | 开发环境 window.__MICO_CONFIG__.appId(请求代理等) | portal_dev | | packageScope | string | 所有 | 包作用域(如 @my-company) | micro-react / h5-react: 见各生成器提示;其他: 多从根 package.json 检测 | | cdnPrefix | string | micro-react、h5-react | CDN 路径前缀(如 portaladmin/v2),写入 CICD 脚本中的 CDN_PUBLIC_PATH 等 | 空字符串 | | author | string | micro-react、h5-react、subapp-h5 | 作者信息 | 见各生成器提示 | | initialSubAppName | string | h5-react | 首个子应用目录名(apps/ 下) | app | | initialSubAppDevPort | string | h5-react | 首个子应用独立 pnpm dev 端口 | 8000 | | defaultSubappName | string | subapp-react、subapp-h5 | 子应用默认名称 | subapp-react: subapp;subapp-h5: app | | devPort | string | subapp-react、subapp-h5 | 子应用开发端口 | subapp-react: 8010;subapp-h5: 8000 | | defaultUmdName | string | subapp-umd | UMD 包默认名称 | my-widget | | umdDevPort | string | subapp-umd | UMD 包开发端口 | 9100 |

所有字段均为可选,未配置时使用默认值或交互式提示。

Monorepo 项目生成器 (micro-react)

创建基于 qiankun 微前端架构的完整 Monorepo 项目:

mkdir my-project && cd my-project
mico create micro-react

生成的项目包含:

  • 主应用 (layout) - qiankun master
  • @mico-platform/ui、@mico-platform/theme
  • Turborepo + pnpm Workspace
  • Husky + Commitlint
  • @common-web/sentry 错误监控与 SourceMap 上传

若需要 Umi 4 H5 多应用 + 开发网关 / dev 预设,请使用 h5-react(见 docs/h5-react-generator.md)。

React 子应用生成器(subapp-react)

该生成器会复制 apps/homepage 模板为新的子应用,并替换标识字符串。 config/ 目录下的多环境配置会完整保留。

cd <monorepo-root>
mico create subapp-react

详见 docs/subapp-react-generator.md

H5 Monorepo 生成器(h5-react)

用于创建 Umi 4 多子应用 H5 仓库:pnpm workspace、Turborepo、开发网关(page.config.ts)、dev 预设,并联动 subapp-h5 生成首个 apps/<名>/ 子应用。内部包含 11 个 workspace 包:domain(API/CDN/多语言基址)、js-bridge(H5 ↔ 原生通信)、request(基于 Umi 的统一请求;isShowLoading 默认 true)、common-intlinit()js-bridge.getUserInfo 取语言)、components(沉浸式 H5 布局)、constant / deeplinkumi-config子应用 config/*.ts 全部委托到此包的工厂,并内置 Sentry sourcemap 上传插件 src/plugins/apply-sentry-plugin.ts)、utilseslinttypescript。模板内已接入 @common-web/sentry(子应用布局错误边界、生产构建 externals),根目录提供 build / build:development / build:testing / build:production 与 CICD 各环境对应;环境变量 .env.development / .env.testing / .env.production 集中维护在仓库根,lint-staged 通过 .lintstagedrc.js 集中维护。pnpm-workspace.yamlcatalog 钉扎 umireact*tailwindcsstailwindcss-safe-area@umijs/pluginscross-env@common-web/sentry 等版本(@sentry/webpack-plugin 仅装在 packages/umi-config,不在仓库根、不在子应用)。

mkdir my-h5 && cd my-h5
mico create h5-react

若当前目录已存在 pnpm-workspace.yaml,需使用 mico create h5-react --force(会覆盖已有文件,请谨慎)。

详见 docs/h5-react-generator.md

H5 子应用生成器(subapp-h5)

在由 h5-react 初始化的 Monorepo 根目录执行,在 apps/<名>/ 下新增 Umi 子应用,并更新根目录 page.config.tsdev.preset.json。子应用模板默认:

  • config/ 全部委托到 <%= packageScope %>/umi-configcreateBaseConfig / createDevConfig / createProConfig / createDevelopmentConfig / createTestingConfig / createProductionConfig);不再在子应用里重抄 pluginsrequest: {}externals 或 Sentry 上传逻辑——createProductionConfig 自动接入 sourcemap 上传(需 SENTRY_AUTH_TOKEN
  • src/intl.ts + src/app.tsxinit({ tag, indexedDBParams }) 取得 { fetchMultilingualData, i18n },首屏前 fetchMultilingualData()init() 内部经 <%= packageScope %>/js-bridgegetUserInfo() 取语言
  • src/layouts/index.tsx<SentryErrorBoundary><Outlet/></SentryErrorBoundary>
  • src/services/<域>.ts 就近定义请求/响应 interface 与服务函数;mock/<域>.ts 复用 <%= packageScope %>/utils/mockbaseUrl / tryProxy(zod 入参校验、mockjs 占位、可选 ?remote= 透传到真实后端)
  • Tailwind 3 + tailwindcss-safe-areatailwind.css(含 font-size: 16px; + 1vw 适配)、tailwind.config.jsESM,扫描 ./src/** + packages/components/src,挂安全区插件)
  • config/routes.ts 仅含静态基础路由;动态菜单可与 window.__MICO_MENUS__ 等配合
cd <h5-monorepo-root>
mico create subapp-h5

详见 docs/subapp-h5-generator.md

UMD 组件包生成器

在 Monorepo 的 packages/ 目录下创建 UMD 格式的组件包,使用 Webpack 构建。适用于通过 <script> 标签加载的场景(如主应用菜单挂载组件、第三方系统嵌入 Widget 等)。

cd <monorepo-root>
mico create subapp-umd

生成器会提示输入:

  • Package name — 包名(如 my-widget
  • UMD global variable name — 全局变量名(如 MyWidget
  • Package scope — 包作用域(自动从根 package.json 检测)
  • Dev server port — 开发端口(默认 9100

生成的包支持:

  • pnpm dev — 启动 webpack-dev-server,同时提供 HTML 预览页和 UMD JS 文件
  • pnpm build — 构建生产环境 UMD 产物到 dist/

开发模式下:

| URL | 用途 | |---|---| | http://localhost:<port>/ | HTML 预览页,独立调试 | | http://localhost:<port>/<name>.umd.js | UMD JS 文件,供主应用通过 jsUrls 联调 |

DevTools Sources 面板中可在 webpack://<name>/src/ 下定位原始 TypeScript 源码进行断点调试。

Multica Desktop 自托管配置(setup multica-desktop

Multica Desktop 默认连接 Multica Cloud;要让它指向公司自托管实例,需要在用户目录写入 ~/.multica/desktop.json配置规范见官方文档)。mico setup multica-desktop 把这个一次性配置封装成了跨平台命令:

mico setup multica-desktop

写入的默认内容(指向米可自托管地址):

{
  "schemaVersion": 1,
  "apiUrl": "https://multica-api.micoplatform.com",
  "appUrl": "https://multica.micoplatform.com"
}

wsUrl 不写,由 Desktop 按官方规则从 apiUrl 自动推导为 wss://multica-api.micoplatform.com/ws

目标路径(跨平台)

| 平台 | 实际路径 | |---|---| | macOS | /Users/<Username>/.multica/desktop.json | | Linux | /home/<Username>/.multica/desktop.json | | Windows | C:\Users\<Username>\.multica\desktop.json |

路径统一通过 os.homedir() 解析,三平台无需任何额外参数。

默认行为

  • 如果文件不存在:创建 .multica 目录,写入默认配置。
  • 如果文件已存在:先备份为 desktop.json.bak.<时间戳>,再覆盖。
  • 完成后需要重启 Multica Desktop 让配置生效。

可选参数

| 参数 | 说明 | |---|---| | --dry-run | 仅预览输出内容,不写盘 | | --no-backup | 已存在时直接覆盖,不生成 .bak | | --force | 同 --no-backup,沿用全局 --force 语义 | | --api-url=<url> | 覆盖默认 apiUrl | | --app-url=<url> | 覆盖默认 appUrl | | --ws-url=<url> | 显式设置 wsUrl(不传则由 Desktop 自动推导) |

示例:

mico setup multica-desktop --dry-run
mico setup multica-desktop --no-backup
mico setup multica-desktop \
  --api-url=https://api.your-domain \
  --app-url=https://your-domain

开发指南

环境准备

# 1. 安装依赖
pnpm install

# 2. 将本地包链接到全局
npm link

# 3. 验证链接成功
mico --version

链接成功后,mico 命令会使用本地代码,可以直接修改代码并测试:

# 测试 micro-react 生成器
mkdir test-project && cd test-project
mico create micro-react

# 测试 subapp-react 生成器(需在已有 monorepo 中执行)
mico create subapp-react

# 测试 h5-react(空目录)
mico create h5-react

# 测试 subapp-h5(需在含 apps/ 的 H5 monorepo 根目录执行)
mico create subapp-h5

# 测试 subapp-umd 生成器(需在已有 monorepo 中执行)
mico create subapp-umd

调试完成后,取消全局链接:

npm unlink -g generator-mico-cli

运行测试

项目使用 Vitest + yeoman-test 进行单元测试和集成测试:

# 运行全部测试
pnpm test

# watch 模式
pnpm test:watch

测试目录结构:

| 目录/文件 | 说明 | |----------|------| | tests/unit/utils.test.js | lib/utils.js 的单元测试 | | tests/unit/setup-multica-desktop.test.js | lib/setup-multica-desktop.js 单元测试(隔离 home 目录,覆盖首次写入 / 备份 / --no-backup / --dry-run) | | tests/integration/micro-react.test.js | micro-react 生成器集成测试 | | tests/integration/subapp-react.test.js | subapp-react 生成器集成测试 | | tests/integration/h5-react.test.js | h5-react 生成器集成测试 | | tests/integration/subapp-h5.test.js | subapp-h5 生成器集成测试 | | tests/integration/subapp-umd.test.js | subapp-umd 生成器集成测试 | | tests/integration/mico-cli.test.js | mico 入口子进程测试(help / version / list / create / doctor / setup) | | tests/helpers/setup.js | 测试共享工具(路径常量、monorepo fixture 工厂) | | tests/helpers/mico-subprocess.js | 子进程运行 bin/mico.js 工具函数 |

Scripts 说明

| 脚本 | 命令 | 说明 | |------|------|------| | sync:subapp-react-template | pnpm run sync:subapp-react-template -- <source-path> | 将源项目的 apps/homepage 同步到 subapp-react 模板目录,忽略清单见 generators/subapp-react/ignore-list.json | | verify:micro-react | node scripts/verify-micro-react.js [test-dir] | 端到端验证 micro-react + subapp-react 生成器,自动创建项目并回车通过所有提示 |

verify-micro-react.js

自动化验证脚本,依次执行:

  1. 创建或清空测试目录
  2. 运行 mico create micro-react(自动回车通过 5 个提示)
  3. 运行 mico create subapp-react(自动回车通过 4 个提示)

测试目录支持三种方式指定:

  • 命令行参数:node scripts/verify-micro-react.js /path/to/dir
  • 环境变量:VERIFY_TEST_DIR=/path node scripts/verify-micro-react.js
  • 默认值:../test-app2

sync-subapp-react-template.js

从源 monorepo 项目同步 apps/homepage 到生成器模板目录:

# 通过环境变量
SOURCE_PROJECT_ROOT=<source-path> pnpm run sync:subapp-react-template

# 通过命令行参数
pnpm run sync:subapp-react-template -- <source-path>

会自动记录源仓库的 git commit 信息到 .template-version.json

项目结构

mico-cli/
├── bin/mico.js              # CLI 入口(命令解析、生成器调度、setup 子命令分发)
├── lib/
│   ├── utils.js             # 共享工具函数(字符串转换、文件处理、npm 版本查询、配置加载)
│   └── setup-multica-desktop.js  # `mico setup multica-desktop` 核心实现
├── generators/
│   ├── micro-react/         # Monorepo 项目生成器(qiankun)
│   ├── subapp-react/        # React 子应用生成器
│   ├── h5-react/            # H5 Monorepo(Umi + 网关 / 预设)
│   ├── subapp-h5/           # H5 Umi 子应用
│   └── subapp-umd/          # UMD 组件包生成器
├── scripts/                 # 辅助脚本
├── tests/                   # 测试文件
├── docs/                    # 功能文档
└── vitest.config.js         # 测试配置

提交规范

请使用语义化提交信息:

feat: 添加新功能
fix: 修复 Bug
refactor: 代码重构
docs: 文档更新
test: 测试相关
chore: 构建/工具链变更