wormaworma
指南

Monorepo 支持

在 Monorepo 项目中自动识别子包并生成 API 代码

如果项目是一个 Monorepo 项目,worma 会自动在根目录读取 package.json 中的 workspaces 字段或 pnpm-workspace.yaml,自动识别子包并在各个包含 worma.config.[j|ts] 的子包中运行生成命令。

工作原理

项目结构示例

package.json
pnpm-workspace.yaml
worma.config.js
worma.config.js

使用方式

在 Monorepo 根目录执行:

worma gen

worma 会自动:

  1. 读取 package.jsonworkspacespnpm-workspace.yaml
  2. 遍历所有子包目录
  3. 在每个包含 worma.config.[j|ts].wormarc 的子包中执行生成命令
  4. 汇总显示所有子包的生成状态

指定生成单个子包

如果只需要生成某个子包的 API 代码,可以使用 --project 参数指定子包路径:

worma gen --project ./packages/user-service

这会跳过 Monorepo 扫描,仅在指定的子包目录中执行生成。

子包配置示例

每个子包可以独立配置自己的 OpenAPI 文档地址、模板和插件:

// packages/user-service/worma.config.js
import { defineConfig } from 'wormajs';
import { axios } from 'wormajs/plugin';
import { aiDoc } from 'wormajs/plugin';

export default defineConfig({
  generator: [
    {
      input: 'https://user-service.example.com/openapi.json',
      output: 'src/api',
      serverName: '用户服务',
      plugins: [axios(), aiDoc()],
    },
  ],
});

根目录统一管理

也可以在 Monorepo 根目录的 worma.config 中统一配置所有子服务:

import { defineConfig } from 'wormajs';
import { axios } from 'wormajs/plugin';

export default defineConfig({
  generator: [
    {
      input: 'https://user-service.example.com/openapi.json',
      output: 'packages/user-service/src/api',
      serverName: '用户服务',
      plugins: [axios()],
    },
    {
      input: 'https://order-service.example.com/openapi.json',
      output: 'packages/order-service/src/api',
      serverName: '订单服务',
      plugins: [axios()],
    },
  ],
});

根目录统一管理时,每个 generator 的 output 应指向对应子包的目录,同时建议为每个设置 serverName

On this page