@bestfulfill-inc/apifox-to-typescript
v0.2.8
Published
Apifox multi-project API generator CLI based on openapi-ts-request.
Readme
@bestfulfill-inc/apifox-to-typescript
安装
pnpm add -D @bestfulfill-inc/apifox-to-typescript初始化配置
pnpm apifox init该命令会创建 apifox.config.ts:
import { defineConfig } from '@bestfulfill-inc/apifox-to-typescript';
export default defineConfig({
apifoxToken: '',
requestImport: "import { request } from '@/services/request'",
outputBaseDir: 'src/services',
projects: []
});每个项目生成的文件会合并到同一个目录中:
src/services/
projectId_<projectId>/
request.ts
types.ts
mock.ts
index.ts生成 API
全量生成
pnpm apifox update增量生成
pnpm apifox --p xx [--name <name>]
pnpm apifox --p xx --f xx [--name <name>]--projectId / --folderId 仍兼容,但推荐用更短的 --p / --f。
导出原始文档(不生成 TypeScript,二选一):
pnpm apifox --p xx --json
pnpm apifox --p xx --yaml文档会写入项目输出目录,分别生成 openapi.json 或 openapi.yaml。
其他配置
| 字段 | 类型 | 必填 | 说明 |
| ---------------------- | ----------------------- | --- | --------------------------------------------------------------------------------------- |
| apifoxToken | string | 否 | 共享的 Apifox API token;未配置时读取环境变量 APIFOX_ACCESS_TOKEN |
| requestImport | string | 否 | 默认为 import { request } from '@/services/request';支持完整 import 语句,也支持模块路径,生成时会提取本地请求名 |
| outputBaseDir | string | 否 | 默认为 src/services;生成项目目录的基础目录 |
| projects | ApifoxProjectConfig[] | 否 | 项目生成列表;全量生成时为必填,仅使用 --p 增量生成时可为空 |
| project.name | string | 否 | 本地项目标识,用于生成的输出目录名;默认值为 projectId_<id> |
| project.projectId | string | 是 | Apifox 项目 ID |
| selectedFolderIds | number[] | 否 | 导出时包含的 Apifox 接口分类/目录 ID。为空或省略时表示导出全部 |
| isSplitTypesByFolder | boolean | 否 | 是否按 selectedFolderIds 自动拆分为 folderId_<id> 子目录,默认 false |
| hook | ApifoxHookConfig | 否 | 支持函数名、类型名和请求调用表达式的定制 |
除 apifoxToken 外,顶层配置都可以放到项目级配置里覆盖。
Hook 扩展
hook 支持配置在顶层作为所有项目的默认值,也支持项目级覆盖。
import { defineConfig } from '@bestfulfill-inc/apifox-to-typescript';
export default defineConfig({
apifoxToken: '',
requestImport: "import { request } from '@/services/request'",
outputBaseDir: 'src/services',
hook: {
customFunctionName(data, prefix) {
return `${prefix ?? ''}${data.operationId ?? 'request'}`;
},
customTypeName(data) {
return `${data.operationId ?? 'Request'}Result`;
},
customRequest({ method, url, params, responseType }, requestName) {
return `${requestName}.${method}${responseType}(${url}${params ? `, ${params}` : ''})`;
}
},
projects: []
});