一个从swagger自动生成ts,js代码的工具
- 支持多来源
- 支持生成指定tag下的接口
- 减少模板代码
- 接口的版本控制
- 请求参数和返回结果的自动提示
- 自动生成文档和注释
npm install sisyphus-cli -g
- 新建文件夹如
xxx-api
sisyphus init xxx-api
初始化- 查看如何更新代码
- 进入相应文件夹如
xxx-api
- 查看
sisyphus.js
文件file路径是否执行对应swagger的地址 - 执行
sisyphus
生成ts - 执行
npm run build
生成js
module.exports = {
"file": "http://localhost:8000/v2/api-docs",
"tags": {
"信息相关": "message",
},
outDir: "./src/service",
nameStrategy(interfaceInfo, changeCase) {
const subs = interfaceInfo.parsedPath.dir.split('/');
const dirSub = subs.slice(subs.length - 2);
dirSub.push(interfaceInfo.parsedPath.name);
dirSub.push(interfaceInfo.method.toLocaleLowerCase());
return changeCase.camelCase(dirSub.join('_'));
},
dataKey: 'data',
optionalQuery: false,
appendOptions: true,
onlyTags: false,
createTags: false,
requestPath: "@/service/request.ts",
mock: true,
mockOverwrite: result => {
return Object.assign({}, result.response, {
"resultCode": 100,
"resultMsg": "",
"success": true
})
}
responseNullable: true,
formatUrl: (baseUrl, url) => baseUrl + "/" + url
}
必填,表示swagger地址,可以是url或者file 如果是对象比如
{
"a": "http://localhost:8000/v2/api-docs",
"b": "http://localhost:8000/v2/api-docs",
}
会在各自模块下生成对应的请求文件和模型 outDir + "a" 下面生成请求文件和模型 outDir + "b" 下面生成请求文件和模型
可选,表示tag映射,如果tag是中文的最好映射一下
可选,命名策略, interfaceInfo
接口信息,changeCase
表示change-case
实例
可选,字符串,响应结果解包。Result<T> { data: T, code: number, string }
,设置dataKey为data
, Promise<Result<BaseVo>>
=> Promise<BaseVo>
可选,默认false,将所有query属性转为option
可选,增加额外的options, function abc() { return request({}) }
=> function abc(options?: any) { return request({ ...options }) }
可选,根据tags生成对应的controller而不是所有, 默认false
可选,自动生成位置, 默认./src/api
可选,请求路径位置, 默认如果file是string 返回./request
,否则../request
现在不会生成request.ts
文件可参考自己写一份
import axios from 'axios'
function bindUrl(path: string, pathParams: any) {
if (!path.match(/^\//)) {
path = '/' + path;
}
var url = path;
url = url.replace(/\{([\w-]+)\}/g, function (fullMatch, key) {
var value;
if (pathParams.hasOwnProperty(key)) {
value = pathParams[key];
} else {
value = fullMatch;
}
return encodeURIComponent(value);
});
return url;
}
const request = axios
export { request, bindUrl };
可选,默认false, 生成tags文件方便映射
可选,默认false, 在src同级mock目录下生成mock文件
可选,null, mock响应覆盖
mockOverwrite: result => {
return Object.assign({}, result.response, {
"resultCode": 100,
"resultMsg": "",
"success": true
})
}
可选,boolean, 响应为 T | null
可选,自定义拼接URL
Q: 我遇到了中文的model怎么办?
A: 修改java中的注解,
@ApiModel("xxx")
=>@ApiModel(description = "xxx")
- 生成model代码
- 生成api代码
- 优化注释
- 自动打包发布到npm,包含可以提示的d.ts
- 自动生成浏览器可以用的js
- 考虑泛型的优化
-
0.15 如果request.ts已存在则不覆盖
-
0.16 修复解析数组的报错的bug
-
0.17 增加命名策略
-
0.18 增加命名策略
-
0.22
sisyphus.json => sisyphus.js 移除
generic
选项,工具会判断,自动生成 -
0.23
超过三个类型的query自动生成query类型
-
0.24
修复字典解析错误的问题
-
0.25
增加onlyTags选项,移除onlyModel
-
0.26
增加dataKey,用于返回解包