Git Product home page Git Product logo

swet's Introduction

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

swet's People

Contributors

chnliquan avatar nuanchaheye avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.