背景
最近公司打算采用vue3 + typescipt进行开发,但是typescript繁杂的类型定义是个比较大的工作量,而且每个人写法也不够统一,考虑可不可以使用工具实现进行自动转换,调研很久,发现现在用的比较多的就是swagger-typescript-api、open-api、yapi这些,各有优缺点,最后决定采用swagger-typescript-api,但是又不能完全满足我们需求,所以决定进行一个二次开发
设计目标
- 类型统一生成
- 按照模块生成(多swagger)
- 抛出api的类实例
- 集中包管理【monorepo+lerna】
- 轻量打包【rollup】
// 首先我们需要有一个lerna仓库
lerna init
//在这里我的packages子包里存放的是生成的api格式
lerna create <project>
lerna create <project>
// lerna.json
{
"packages": [
"packages/*"
],
"command": {
"publish": {
"allowBranch": "main",
"conventionalCommits": true,
"exact": true,
"message": "chore(release): publish %s",
"registry": "git@github.com:xxxx/xxxx.git"
},
"bootstrap": {
"ignore": "component-*",
"npmClientArgs": [
"--no-package-lock"
]
}
},
"version": "independent"
}
package.json
mkdir script
cd script
touch rollup.config.js
rollup.config.js
这里因为需要codedesgin是另一个生成ts源码的包,所以我们需要配置入口与出口, 我是通过cross-env传递参数,知道当前要编译的为哪个子包,从而拿到当前路径,rollup中的format 决定我们打包文件的格式,在这里我们需要一份为.js来做出口被业务方调用,一份为.d.ts文件的编辑器友好提示,在这里要注意一个问题,因为我们编译的是ts文件,其中包含axios请求,那么要对第三方包进行排除,同时在ts.config.json中进行配置 "moduleResolution": "node", ,不然在打包过程中一直会报错提示“axios” 找不到
| 包名 | 描述 |
|---|---|
| rollup-plugin-clear | 清除文件 |
| @rollup/plugin-json | 对json转换 |
| @rollup/plugin-babel | rollup babel插件 |
| @rollup/plugin-typescript | 编辑typescript |
| @rollup/plugin-node-resolve | 在node_模块中查找并绑定第三方依赖项 |
| rollup-plugin-dts | .d.ts |
主要目录
子包的package.json!
要注意的是main,module, types 要配置,
publishConfig 中的镜像源要配置npm
发布
// 在这个之前我们要进行登陆npm
npm login
// 输入你的账号密码
lerna publish
测试使用
编辑器友好提示