Skip to content
/ swet Public

前端开发的提效工具,通过接口文档说明数据自动生成前端接口层代码

License

Notifications You must be signed in to change notification settings

kcfe/swet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

7be7e6a · Jan 3, 2023

History

18 Commits
Apr 11, 2022
Sep 27, 2022
Sep 8, 2022
Sep 29, 2022
Jan 3, 2023
Sep 29, 2022
Sep 8, 2022
Sep 8, 2022
Sep 22, 2022
Sep 8, 2022
Sep 22, 2022
Sep 8, 2022
Sep 22, 2022
Jan 3, 2023
Jan 3, 2023
Sep 8, 2022
Sep 29, 2022
Apr 11, 2022
Sep 22, 2022
Jan 3, 2023
Sep 22, 2022
Apr 11, 2022
Sep 27, 2022
Sep 8, 2022
Sep 8, 2022
Sep 8, 2022

Repository files navigation

swet logo

swet

swet(发音 /swēt/,取自于 sweet) 是前端开发的提效工具,通过接口文档说明数据自动生成前端接口层代码

✨ 特性

  • 多语言支持 默认支持 typescriptjavascript 项目,也支持拓展其他语言写法
  • 适配多种数据类型 适配 swagger2swagger3 文档数据类型,也可定制解析器适配其他数据类型
  • 无障碍接入 无论新旧项目都没有接入成本,对于生成的代码不使用的部分对项目完全没有副作用
  • 配套开发 根据接口文档一站式配套生成 ts 类型定义、mock 数据可在开发中直接接入使用

📦 开始

1、项目下安装 @swet/cli 工具包

# 选择一个你喜欢的包管理器

# npm
$ npm i @swet/cli -D

# pnpm
$ pnpm i @swet/cli -D

# yarn
$ yarn add @swet/cli -D

2、package.json 下准备脚本命令

 "scripts": {
     "swet": "swet co",
 }

3、项目下运行 npm run swet 命令,按照提示继续即可

🔨 配置项

interface SwetCliConfig {
  /**
   * 接口文档地址列表,可以是远程路径也可以是本地路径
   */
  sources: string[]
  /**
   * 生成代码的存放路径,使用相对路径即可;
   * 默认值:src/apis
   */
  outDir?: string
  /**
   * 生成代码的语言模版
   * 默认值:判段项目目录下是否有 tsconfig.json || tsconfig.base.json
   */
  language?: 'js' | 'ts'
  /**
   * 数据源名称,多数据源的通过制度数据源名称便于区分选择;
   * 默认值:数据源+index
   */
  name?: string
  /**
   * 参数是否可选生成规则
   * 默认值:pureInfer
   */
  parameterMode?: 'strict' | 'loose' | 'strictInfer' | 'looseInfer' | 'pureInfer'
  /**
   * 自定义生成类型名称前缀
   * eg: Props => IProps
   */
  interfacePrefix?: string
  /**
   * prettier 代码格式化配置项
   * 默认值:['.prettierrc', 'prettier.config.js', '.prettierrc.js']读取项目下第首先读取到的配置文件
   */
  prettierConfig?: Record<string, any>
  /**
   * 自定义获取文档的方法或补充 headers 信息
   */
  fetcher?: Record<string, any> | (() => Document)
  /**
   * 对 service 默认模版自定义拓展
   */
  transfromService?: (info: ServiceInfomation) => {
    /** 自定义生成方法名 */
    name?: string
    /** 添加 headers */
    headers?: Record<string, any>
    /** 添加统一的路径前缀 */
    baseUrl?: string
  }
  /**
   * 对 controller 文件进行自定义拓展
   */
  transformController?: (controllerName: string) => {
    /** 添加在 controller file 头部代码 */
    leadingCode?: string
    /** 添加在 controller file 尾部代码 */
    trailingCode?: string
    /**
     * 自定义 controller file name
     * 默认值:controllerName
     */
    fileName?: string
  }
  /**
   * 数据代理能力配置
   */
  mocks?: {
    /** mock 数据存放目录,不指定则不会生成 mock 数据 */
    output?: string
    /** 需要转发的接口统一前缀 */
    forwardUrl?: string
    /** proxy 代理配置项,详情可见 http-proxy-middleware */
    httpProxy?: Options
    /** 代理过滤规则 */
    filterProxy?: (req: Request) => boolean
    /** 自定义转换 mock 数据,可用于补充特征值 */
    transformer?: (data: any, serviceInfo: ServiceInformation) => string
  }
  /**
   * 数据格式转换适配器
   * 默认值:根据文档关键信息自动选择已经默认集成的适配器
   */
  Adapter?: typeof Adapter
  /**
   * 代码模版生成器
   * 可以通过复写方法自定义代码模版
   */
  CodeGenerator?: typeof CodeGenerator
}

❓ 常见问题

1、如何在项目中接入多份文档?

import { SwetCliConfig } from '@swet/cli'

export const swet: SwetCliConfig[] = [
  {
    source: ['xxx'],
    outDir: './src/apis-1',
  },
  {
    source: ['xxx'],
    outDir: './src/apis-1',
  },
]

2、mock 如何使用?mocks 配置项说明?

  • 如果在开发过程中完全使用请求 proxy,那么可能不需要了解此配置项

  • 如果想使用 mock 数据或者 mock、proxy 同时使用将可以使用此配置项 demo

    • 首先将 swet 提供的 webpack dev server 中间件挂载
    import { swetMockMiddleware } from '@swet/cli'
    
    module.exports = {
    //...
    devServer: {
      onBeforeSetupMiddleware: function (devServer) {
        swetMockMiddle(devServer.app)
      }
    }
    • 剩余配置项说明

      • output: mock 数据的存放目录
      • forwardUrl: 需要 middleware 转发的接口统一前缀
      • httpProxy: 若有此配置项将会走 proxy 方式,没有则走本地 mock,此配置项详情可见 http-proxy-middleware
      • filterProxy: 在配置了 httpProxy 使用 proxy 的情况下,可以通过此配置项将请求过滤,不走 proxy 从而使用本地 mock
      • transformer: 自定义转换生成的 mock 数据,可用于补充返回数据特征值
    • mock 数据寻找规则说明

      • 以 mock 数据存放目录为 ./mock, 请求路径 /rest/dsp/agent/info,请求方法 post 为例
      • 首先会寻找项目目录下 mock/rest/dsp/agent/info/post.js 文件夹下的数据
      • 在上一步寻找文件数据失败的情况下则会寻找 swet 默认生成的 mock 数据,也就是 mock/__mock_data_generate_by_swet__/rest/dsp/agent/info/post.js 文件夹下的数据

📄 LICENSE

MIT