UNPKG

@postar/yapi-sdk-gen

Version:

从 YAPI 接口文档自动生成 TypeScript 类型定义、请求函数、Mock 文件的 SDK 工具,帮助前端团队实现接口类型安全与自动化对接。

113 lines (99 loc) 4.29 kB
# YAPI SDK 生成器 [![npm version](https://img.shields.io/npm/v/@postar/yapi-sdk-gen.svg)](https://www.npmjs.com/package/@postar/yapi-sdk-gen) [![license](https://img.shields.io/npm/l/@postar/yapi-sdk-gen.svg)](https://github.com/your/repo/blob/master/LICENSE) 一个基于 YAPI 接口文档的自动化 SDK 生成工具,帮助前端团队提升开发效率和代码质量。 ## ✨ 特性 - 🚀 **自动生成** - 从 YAPI 接口文档自动生成 TypeScript 类型定义、请求函数和 Mock 文件 - 🔒 **类型安全** - 完整的 TypeScript 类型支持,提供代码补全和类型检查 - 📦 **零配置** - 开箱即用的默认配置,满足大多数项目需求 - 🎨 **高扩展性** - 支持自定义模板,灵活适配不同项目规范 - 🔄 **实时同步** - 监听接口文档变更,自动更新本地代码 - 🎯 **开发提效** - 告别手写接口代码,专注业务逻辑开发 ## 🎯 功能 - TypeScript 类型定义生成 - 请求函数自动生成 - Mock 数据文件生成 - 支持自定义模板 - 支持批量生成和单个生成 - 支持实时预览 ## 📦 安装 ```bash npm install @postar/yapi-sdk-gen --save-dev # 或者 pnpm install @postar/yapi-sdk-gen --save-dev # 或者 yarn add @postar/yapi-sdk-gen -D ``` #### 使用示例 1. 根目录创建 `yapi-sdk-gen.js` 文件。 2. 在 yapi-sdk-gen.js 中配置: ```js import startYapiSdkGenServer from '@postar/yapi-sdk-gen' // 可选mock配置 const mockConfig = { enable: true, // 启用 mock 生成 mockPath: 'apps/marketing_ai/mock', // mock 文件输出路径 mockFolderName: '/', // mock 文件夹名称 delay: 300, // 默认延迟时间 prefix: '/dev-api/aiMarket', // API 前缀 // 添加默认响应配置(可不配置,按默认) defaultResponse: { codeKey: 'code', // 状态码的字段名 messageKey: 'msg', // 消息的字段名 codeValue: 200, // 状态码的默认值 messageValue: '操作成功' // 消息的默认值 }, // 添加模板配置(可不配置,按默认) template: { // 文件头部导入语句 imports: `import { defineMock } from 'vite-plugin-mock-dev-server';\nimport Mock from 'mockjs';`, // 文件导出模板 exportTemplate: configs => `export default defineMock([\n ${configs}\n]);`, // mock 配置模板 mockConfigTemplate: (config, formatJson) => `{ url: '${config.url}', method: '${config.method.toUpperCase()}', delay: ${config.delay}, body: Mock.mock(${formatJson(config.body)}) }` } } // 主要配置 const config = { mockConfig, port: 3456, // 启动端口 serverUrl: 'http://xxx.xxx.xxx.xxx:xxx', // 服务器地址 token: 'xxx', // 登录token projectId: '295', // 项目id outputConfig: { requestPath: 'apps/marketing_ai/src/apis', // 生成的请求路径 requestFolderName: 'api', // 生成的请求文件夹名 typePath: 'apps/marketing_ai/src/apis', // 生成的类型路径 typeFolderName: 'types' // 生成的类型文件夹名 }, importTypePath: `@/apis/types`, // 导入的类型路径 importTemplate: `import { request } from "../../index";\nconst baseUrl = 'aiMarket';`, // 导入模板 importTypeTemplate: ({ importTypes, importPath }) => `import type { ${importTypes.join(', ')} } from '${importPath}';`, // 自定义类型导入模板 requestTemplate: ({ functionName, // 生成的函数名 functionParams, // 参数数组 reqInterfaceName, // 请求类型 resInterfaceName, // 返回类型 urlWithParams, // url字符串,带模板变量 method, // 请求方法 hasQuery, // 是否有query参数 hasBody // 是否有body参数 }) => `export const ${functionName} = (${functionParams.join(', ')}) => request<${reqInterfaceName}, ${resInterfaceName}>({ url: \`/\${baseUrl}${urlWithParams}\`, method: "${method.toUpperCase()}"${hasQuery ? ',\n params: query' : ''}${hasBody ? ',\n data' : ''} });`, } startYapiSdkGenServer(config) ``` 3. 根目录运行: ```bash node yapi-sdk-gen.js ``` ![YAPI SDK 生成器](https://img.remit.ee/api/file/BQACAgUAAyEGAASHRsPbAAIku2hZGtoJlEFtyOSRH2_6i3hHG9nAAALhFwACM-TIVom3NJ0ulVF0NgQ.png)