组件化平台设计理念

95 阅读3分钟

前端组件化划分

1、面向运营,运营人员进行页面的创建、设计,组件类似乐高积木一样拼凑起来
2、面向设计,设计师直接将设计稿转成前端代码,比如阿里的 imgcook
3、面向开发,抽离页面的公共组件,提高代码复用性、质量和效率

组件化粒度划分

1、组件化,最小粒度,一个icon 或者一个button
2、模块化,从业务和功能的纵向进行划分,每一个模块既包括UI又包括业务逻辑,比如播放器组件播控播放控制和UI样式,分享组件包括分享功能和弹窗,支付组件包括支付流程和收银台支付结果页;
3、模板化,整个页面复用

设计理念

渐进式。先从组件化开始,逐步适应模块化,最终走向模板化

设计目标

1、代码复用,提升开发效率
根据业务特点,横向和纵向划分组件,以组件为单位承接业务需求。虽然以UI组件为主,但对于相对独立的功能,也进行了纵向的组件抽取。

2、组件独立开发维护,与各项目解耦
组件单独开发、调试、发布,供业务方调用,业务方只需专注业务本身。

3、更方便的组件调用,更合理的路由跳转
组件调用需明确输入、输出参数,并对参数进行校验并给出合理错误提示;当各项目引用业务组件 涉及到跳转时,组件库自动决定是项目内(前端路由)跳转还是项目外(location.href)跳转。

4、组件文档化,支持在线调试,降低组件使用门槛
组件库需要有完善的使用说明文档,支持在线调试,使业务方更加容易、便捷的使用。

组件划分

1、业务组件

  • 页面组件:也叫路由组件,将页面当做微服务供其他项目引用
  • 功能组件:完成某项业务功能,如播放器,图片预览
  • 区块组件:独立的区块UI展示,如评论组件
  • Card组件:由多个item组件组成,如轮播图,列表,表格
  • item组件:业务组件最小单元

2、基础组件

  • 基础UI组件:button,text,loading,toast
  • 基础工具库:fetch,passport,storage

技术实现

1、设计原则: 单一职责、可配置、纯组件、高性能
2、构建工具
基础组件库是一组JS库,适合使用rollup构建,
UI组件库,使用Vue作为前端UI框架,使用webpack构建,支持业务组件按需加载
3、技术文档:基于storybook搭建UI组件的文档
4、发布/持续集成:业务组件通过jenkins工具统一发布

可能的问题和优化

组件支持按需加载就意味着,各组件入口需要单独打包,这会涉及到各入口的公共资源重复引用的问题。
我们可以

1、使用@babel/runtime,@babel/plugin-transform-runtime,设置 core-js 为 false,做大限度减小 babel 转换的包体。
2、使用 babel 命令打包 JS 文件(不使用 webpack),减小 JS 包体。
3、使用 webpack externals 将第三方依赖,以及每个组件的公共引用提出来,通过 require 的方式去引用,而不是重复打包到每个组件内。

总结

前端组件化可以很大程度上降低系统各个功能的耦合性,赋对前端工程化建设及代码维护成本的降低