lerna + rollup + swagger自动转换ts

943 阅读2分钟

背景

最近公司打算采用vue3 + typescipt进行开发,但是typescript繁杂的类型定义是个比较大的工作量,而且每个人写法也不够统一,考虑可不可以使用工具实现进行自动转换,调研很久,发现现在用的比较多的就是swagger-typescript-api、open-api、yapi这些,各有优缺点,最后决定采用swagger-typescript-api,但是又不能完全满足我们需求,所以决定进行一个二次开发

设计目标

  1. 类型统一生成
  2. 按照模块生成(多swagger)
  3. 抛出api的类实例
  4. 集中包管理【monorepo+lerna】
  5. 轻量打包【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 image.png

mkdir script
cd script
touch rollup.config.js

rollup.config.js image.png

image.png

这里因为需要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-babelrollup babel插件
@rollup/plugin-typescript编辑typescript
@rollup/plugin-node-resolve在node_模块中查找并绑定第三方依赖项
rollup-plugin-dts.d.ts

主要目录

image.png

子包的package.json! 要注意的是main,module, types 要配置, publishConfig 中的镜像源要配置npm image.png

发布

// 在这个之前我们要进行登陆npm
npm login
// 输入你的账号密码
lerna publish

测试使用

image.png 编辑器友好提示 image.png

image.png