写开源组件库需要知道些什么

简介: 本文总结下近几年维护公司开源 React 组件库的一些经验。

网络异常,图片无法展示
|

本文总结下近几年维护公司开源 React 组件库的一些经验。文章主要分为六部分讲解:

  • 组件编写
  • 文档
  • 构建/发包
  • 开源
  • 测试
  • 其它

本文制作概念阐述,不做实操讲述,后面可能会分几篇分别介绍每个部分。

组件编写

这部分主要分为组件技术选型和编写组件时注意要点。

技术选型

技术选型主要包括三部分:样式编写选型、JS 编写选型,这两方面主要要看团队技术栈和发展来决定。

由于组件编写样式需要非常重视隔离的问题,否则很容易在各种环境下由于各种样式覆盖导致一场。

常用的样式编写有以下几种方案:

  • css in js
  • css modules
  • BEM 命名
  • shadow DOM

每个方案间各有优劣,最好视团队目前情况后后续发展来决定,不建议混合方案。

JS 编写选型主要是编写时所用的语言,可以使用:

  • js
  • ts
  • flow
  • coffeescript 等

此处如果团队有能力建议直接使用 TS,对于组件而言接口类型和代码质量都很重要,使用 TS 可以对这两方面有显著提升。当然 flow 等也有这方面的优势,不过鉴于发展趋势,TS 无疑是最佳选择。

编写规范

对于公共组件而言,最重要的不是性能、不是质量、不是体积,而是组件的 API 定义。API 一旦定义好,组件的使用风格就会逐渐定型,后期的改动很难去改动已有 API 的定义,还有 API 风格的统一也有助于降低使用者的学习成本。

这就需要在早期就定义好 API 规范,比如:

  • 受控非受控的 API 名称:value、defaultValue、checked、defaultChecked
  • 回调的名称:onChange、onClick、onSelect
  • 透传 props:partProps
  • 控件风格、尺寸、类型等

要注意 API 的可读性、可理解性、是否符合直觉等,可以在早期慢慢定义,参考各类开源库,编写时逐步补充。

并且在早期不建议开放太多的接口,接口一旦开放,后期的升级维护就势必需要考虑,有时会无端增加维护成本。

除了 API 规范后,编写时另外的几个要点:

  • 性能
  • 代码质量
  • 代码复用

针对性能可以定义一些简单的指标,比如保障 Select 组件 1000 条数据无卡顿等。

代码质量这个比较虚,需要借助其它工具来进行检测,后面会讲到。

代码复用在 React 中则有多种方式,如组件颗粒化复用、早期的 mixin、HOC 抽离、decorator,还有大火的 hooks。

除此之外还需要注意组件结构,比如子组件结构,常见的有命名结构:Button、ButtonGroup;或是组件属性挂载,如 Button、Button.Group。

文档

组件除了编写方面的问题,第二重要的便是文档,有了文档才能让开发者方便的使用组件,展示组件的功能。开源常见的与文档相关的工具主要为:storybook 和 react-styleguidist。可以直接读取组件中的 API 定义,生成文档。

当然也可以选择常见的文档系统,然后人工维护,或者自研。

注意明确文档的功能,来选择方案,比如文档需要有哪些功能,常见的包括:组件的文档描述、功能介绍、props、method 定义、demo 演示等。选择时还需要考虑文档的编写成本,如是否可以直接读取注释、组件定义、是否需要额外维护。此外 react-styleguidist 支持实时编辑预览 demo,storybook 支持直接使用 controls 预览 props 变更效果等也可以作为选择时的依据。

构建/发包

组件构建工具选择不是很重要,可以自行选择 webpack、rollup 等,主要要注意的是兼容、输出格式等方面。

比如需要决定好组件针对的的目标环境,针对环境可能需要去配置 browserlist、babel、post-css 来兼容,还需要做好兼容测试。

打包是还需要注意输出的格式:esm、cjs、umd 等,同时要输出 sourcemap、接口定义等,这样才能方便开发者调试和反馈问题。

打包完成后便是发包,正常会法包至 npm,需要注意好发布的文件、版本号规范、依赖项、协议、tree-shaking、模块文件定义等等,这个可以翻一翻 package.json 中的字段定义。

开源

开源时需要选择托管平台,比如 github、gitlab、gitee 等,可以 GitHub + gitee 来避免某些不可说的访问失败。

同时开源后可以利用好托管平台的功能,如在 github 中可以使用:issue、pr、pages、action、编写 contribution guide 等。

还有需要注意选择开源协议,常规开源项目大部分为 MIT 协议。

测试

为了组件的稳定性,还需要做好测试,测试可以分为两类:方法测试和 UI 测试。

方法测试很简单,针对方法写好单测即可,UI 测试一般需要选择相应的测试库,进行 UI 单元测试,比如测试 disabled 下的 button 组件是否会触发 onClick、测试 select 点击后是否能够正常弹出等。

测试生态中常用的包含一下库:

  • jest
  • enzyme
  • react-testing-library
  • @testing-library

除此外还可进行快照测试,一般的快照测试为直接保存渲染的 DOM 结构的快照,在测试时和已有的快照进行比对,让开发者知道更新后的 DOM 改动。

除了快照测试外,还有图片/像素测试,常见的如:jest-image-snapshot、jsdom-screenshot 等,可将获取组件渲染截图,然后对比设计稿进行像素级比对,也可保存报告结果,比对改动前后的差异。不过需要注意保存图片会占用很多空间,很容易导致 git 资源过多影响平时的同步,所以一般很少会使用。

除了上述具体测试方法外还有测试的覆盖率,覆盖率为测试代码执行时源码中的执行比例,可通过覆盖率来粗略判断测试逻辑是否完善,是否有逻辑遗漏。

其它

除了上述常用内容外,还可以借助很多其它工具来完善组件,如:

  • eslint - 用来规范代码编写,检查代码质量
  • prettier - 用于规范代码格式,统一代码风格
  • stylelint - 检查样式规范和简单的错误
  • commitizen - 规范代码提交,自动化生成 changelog
  • husky,lint-staged - 通过 githook 自动化完成代码格式化、lint 检查
  • ci/cd - 借助 GitHub action、gitlab ci、circle ci、travis 等通过自动化方式进行代码测试、打包、发包、文档生产、部署等等

除此外还需要注意开源时的贡献规范、issue 治理等。

总结

其实相关的内容不只是针对开源 React 组件库,在平时的开发中很多内容也可以用的上,比如规范团队风格、CI/CD 自动化等。

以上便是我总结的关于组件开发中的一些注意事项、生态、经验等,后续会为每个部分出一篇详细的文章,有兴趣的同学可以关注下。

相关文章
|
16天前
|
数据采集 安全 easyexcel
如何快速获取开源组件信息
本文介绍如何使用IP代理技术获取开源组件信息,特别是针对GitHub上的项目。首先讲解了IP代理的重要性及其在突破反爬虫机制、保护隐私等方面的作用,接着详细介绍了Bright Data这一代理IP平台的优势,包括强大的代理网络、灵活的定价策略、合规的数据采集及专业的客户支持。最后,通过Python代码示例展示了如何利用Bright Data的代理IP来爬取GitHub项目的Watch、Fork、Star等信息,帮助评估开源组件的活跃度和维护情况。
|
7月前
|
API 开发工具 数据库
框架和库:你需要知道的一切
框架和库:你需要知道的一切
91 0
|
5月前
|
监控 关系型数据库 分布式数据库
PolarDB开源项目成熟,强调插件开发与第三方工具集成,打造丰富生态。
【7月更文挑战第3天】PolarDB开源项目成熟,强调插件开发与第三方工具集成,打造丰富生态。插件开发涉及需求分析、接口设计、编码、测试和文档撰写。示例展示了性能监控插件的Go代码实现。此外,与DMS的数据迁移工具及Prometheus+Grafana监控系统的集成示例,展示了其易用性。PolarDB通过开放接口鼓励开发者参与生态建设,共同推动数据库技术进步。
76 1
|
Go 微服务
Go语言微服务框架 - 3.日志库的选型与引入
衡量日志库有多个指标,我们今天重点关注两点:简单易用 与 高性能。简单易用是一个日志库能被广泛使用的必要条件,而高性能则是企业级的日志库非常重要的衡量点,也能在源码层面对我们有一定的启发。
376 1
|
7月前
|
中间件 API 文件存储
Django的扩展包与中间件:增强应用功能的利器
【4月更文挑战第15天】本文介绍了Django的扩展包和中间件,两者用于增强Django应用功能。扩展包是可重用的应用,提供额外功能,如用户认证和API开发。选择合适的扩展包,通过安装、配置,可轻松集成到项目中。中间件则在请求和响应之间执行操作,如身份验证和权限控制。创建中间件类并添加到settings.py中,实现特定功能。扩展包和中间件常结合使用,以实现更复杂的应用需求,提高开发效率和应用性能。
|
canal Java 中间件
相关软件、中间件、组件下载地址珍藏库
相关软件、中间件、组件下载地址珍藏库
|
7月前
|
自然语言处理 Java API
常见C++ 开源日志库的比较
常见C++ 开源日志库的比较
321 0
|
7月前
|
存储 缓存 安全
Guava:Java开发者的全方位工具库
Guava:Java开发者的全方位工具库
228 0
|
JavaScript 前端开发 API
什么是框架和库?
什么是框架和库?
132 0
|
JSON Cloud Native 中间件
导入导出框架AGEIPort(GEI)正式开源
AGEIPort 是数字供应链孵化并在阿里巴巴集团内广泛使用的一套性能卓越、稳定可靠、功能丰富、易于扩展、生态完整的数据导入导出方案,致力于帮助开发者在toB复杂业务场景下能够快速交付高性能、体验优、易维护的数据导入导出功能,如用户页面上的Excel/CSV数据文件上传和下载。 目前在阿里巴巴集团内部已有盒马、菜鸟、本地生活、阿里健康、钉钉、淘系等部门有较多使用,并成为多个技术组件的基础底座,经历多次618和双11大促考验,稳定导入导出数据300~400亿条/月。
38168 9
导入导出框架AGEIPort(GEI)正式开源
下一篇
DataWorks