搭建一个微服务前端组件库

1,600 阅读3分钟

老版本的前端组件库,由部分统一的npm包与零碎的组件,使用docz利用mdx文件生成文档网站。基于以下几个原因要升级:

升级原因

问题一: 更新组件后,组件的预览文档在docz的项目包中需要二次修改,有时还需要引入额外的组件依赖,文档更新的时效及流程会变的繁琐。

预期:组件与文档同在一个包中,更新了组件,联动预览页进行更新,每个预览应用会做为组件平台的子应用,通过动态注册子应用、动态添加菜单来发布到预览系统中

问题二: 组件库无法适时更新且包越来越大,更新的时间节点十分笨重,一周更新一次小版本,一月更新中版本。

预期: 各项目组件及组件发布解偶,可以自由发布后有专人审核

问题三: 在项目开发的过程中会生产一些业务组件,需要在当前项目中快速提取一个/多个组件

预期: 只要开发者为项目中的组件编写了组件预览文档,可以快速把项目中的预览文档发布到线上,项目中组件可做为npm组件包发布到npm私库中

架构设计

组件平台架构图.jpg

前端

  • 组件平台(主应用):采用微服务方式把多个组件聚合起来,并提供菜单与导航页面
  • 组件预览页(子应用):组件预览采用mdx的形式,将每一个组件的readme文档通过webpack单独的编译,将编译后的产物发布到服务器上通过一个前端中间件发布,再提供路由用一个主应用聚合起来
  • 组件管理页(子应用): 管理子应用的存货状态

客户端

  • 工具脚手架:编写一个脚手架完成客户端发布审核的功能,可以完成对组件预览的解析并打包成一个微服务子应用、对组件的打包发布、对公共依赖的处理,
  • 子引用模板 :需要对qiankun的状态进行区分处理,还需要提供页面提交审核功能。
  • 组件: 需要编写对应的.md文件

后端

  • node服务:提供一个主应用跟子应用的静态服务,提供组件的信息,提供组件预览页面的发布,审核等功能
  • 数据库:保存子应用的信息,与菜单路由的存活情况。

技术细节

微服务化技术方案

命令行脚手架开发

  • 项目模板克隆:从远程拉取配置模板或者采用问询式的方法生成,并根据配置模板拉取项目的模板。
  • 打包组件: 放入一个webpack,并依赖相应的plugin,loader,安装完cli后可脱离原先项目直接对js文件解析打包。
  • 预览页打包:根据md文件创建路由文件(多入口),webpack创建额外的complier对象,config.entry指向脚手架模板,模板中读取路由并通过配置文件引入md文件
  • MD文档的解析:使用webpack对应的loader,@mdx-js/react @mdx-js/vue等
  • 上传:complier对象执行run方法后根据outputpath上传后即可
  • 自定义解析: 在md文档中用标识做代码块展示,codepen链接等通过自写loader实现

依赖处理

1.预览页

  • 将用到的主流框架打包出一个单独的dll引用。
  • 子引用中通过判断qiankun的状态来决定是否引入

2.打包组件

版本管理

用客户端命令行做基建实现一个MonoRepo的管理