为shared-components组件包裹material-ui主题的最佳实践咨询
针对MUI共享组件库接入无MUI依赖主仓库的最佳实践方案
优先选择方案一:共享组件库内部为每个组件单独包裹自定义theme,属于当前场景下的行业通用最佳实践,核心优势如下:
- 对主仓库完全无侵入:主仓库不需要额外安装MUI相关依赖,也不需要做任何主题配置、组件包裹操作,导入共享组件即可直接使用,接入成本降到最低
- 天然实现样式隔离:组件库内部包裹的主题不会和主仓库本身的样式方案产生冲突,也不会影响主仓库其他业务代码的运行
- 按需加载体积最优:只有被主仓库实际引用的组件才会被打包进产物,不会因为全量引入MUI主题相关代码增加不必要的主包体积,哪怕主仓库只有个别页面用到共享组件也不会产生冗余代码
如果担心每个组件单独包裹ThemeProvider会产生重复的主题实例冗余,可以在组件库内部把主题实例单例化,所有组件复用同一个主题实例即可,几乎不会带来额外的性能开销。
其他方案的适用局限性
- 方案二:需要主仓库开发者手动为每个用到的共享组件包裹你导出的
<ThemeProvider>,接入成本极高,很容易出现漏包裹导致组件样式错乱的问题,维护成本也会随着用到的组件数量上升线性增加 - 方案三:要求主仓库全局包裹
<ThemeProvider>,首先主仓库没有安装MUI依赖的前提下需要额外引入相关包,哪怕绝大多数页面都用不到MUI组件也会增加主包体积,还可能和主仓库已有的全局样式、第三方库样式产生不可预知的冲突,风险最高
内容的提问来源于stack exchange,提问作者MarksCode
相关产品推荐
相关产品推荐

