四十五----组件库设计

2023-12-12 06:28
文章标签 设计 组件 四十五

本文主要是介绍四十五----组件库设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

组件库设计主要考虑几点。
有意义:

  • 命名准确,充分表意。
  • 参数准确,必要的类型检查。
  • 适当的注释
    通用性:
  • 不要耦合特殊的业务功能。
  • 不要包含特定的代码处理逻辑。
    ⽆状态,⽆副作⽤:
  • 状态向上层提取,尽量少⽤内部状态。
  • 解耦IO操作。
    避免过度封装:
  • 合理冗余。
  • 避免过度抽象。
    单一职责:
  • ⼀个组件只完成⼀个功能。
  • 尽量避免不同组件⻅相互依赖、循环依赖。
    易于测试:
    更容易的单元测试覆盖。

组件库设计主要有几大模块。

一、组件库架构选择----仓库管理

Multirepo
⼀个仓库内只⼀个项⽬,以⼀个npm包发布,适⽤于基础组件库。
优点

  • 项⽬简单,调试安装⽐较⽅便。
    缺点
  • 项⽬庞⼤时构建和发布耗时⻓。
  • 组件库使⽤时需整体引⼊,造成⼀定的资源浪费。(可通过es module⽅式解决)
    比如:antdsign

管理工具
git submodule
(git提供的一种管理子仓库的方案
可以批量管理和维护多个git repo
本质上是一个父repo维护了一份各个子repo 的清单
有坑: Git Submodule的坑
替代方案: git subtree

Monorepo
⼀个仓库内管理多个项⽬,以多个npm包⽅式发布,依赖集中管理,npm包版本可以集中管理,也可以 单独管理。通常适⽤于有⼀定关联的组件,但各组件需要⽀持单独的npm包发布和安装。
优点:

  • 共同依赖统⼀管理,版本控制更加容易,依赖管理会变的⽅便。
  • ⽀持组件的单独发布和单独构建。
  • 使⽤时可以单独引⼊。
    缺点:
  • 项⽬搭建复杂度⾼。
    比如react

管理工具:

  • lerna
  • yarn workspace
  • pnpm

二、代码规范

⼀个⾼质量的组件库,eslint和prettier是必须的,能够帮助我们统⼀整个仓库的代码规范。 常⽤的eslint配置:

"eslint:recommended",
"plugin:react/recommended",
"plugin:react-hooks/recommended",
// 如果使⽤ts
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
"prettier"

也可以使⽤业界成熟的eslint配置: @umijs/fabric
.eslintrc.js

module.exports = {extends: [require.resolve('@umijs/fabric/dist/eslint')],
};

.stylelintrc.js

module.exports = {extends: [require.resolve('@umijs/fabric/dist/stylelint')],
};

.prettierrc.js

const fabric = require('@umijs/fabric');
module<

这篇关于四十五----组件库设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/483547

相关文章

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

PyQt6中QMainWindow组件的使用详解

《PyQt6中QMainWindow组件的使用详解》QMainWindow是PyQt6中用于构建桌面应用程序的基础组件,本文主要介绍了PyQt6中QMainWindow组件的使用,具有一定的参考价值,... 目录1. QMainWindow 组php件概述2. 使用 QMainWindow3. QMainW

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx