Skip to content

组件库开发历程

Posted on:2024年3月14日 at 19:45

前言

本来打算春节的时候做的,然而怠惰了。。。年后又因为开始实习换了新环境加上惰性使然,一拖再拖,于是就拖了两个月才新建文件夹(

技术选型与调研

框架 Vue

之前一直打算做React的,个人感觉相对来说React的组件化思维会更强一些?也可能是太久没用Vue的错觉。不过React的生态已经非常繁荣了,本着面向萌新的想法应该也是使用Vue多一点,也顺着捡一捡并没有实战过大型项目的Vue3,最后还是选择了使用Vue作为框架。

代码仓库管理方式 Monorepo

这个无需多言了,组件库项目的不二选择。

题外话:目前接触公司项目的一个多月看来,许多业务仓库也会使用或正在迁移使用monorepo,如果说组件库使用它是因为在多模块方面的优势,大型业务项目使用则可能更贴近工程化思想甚至一些团队文化方面的东西,以后有更深的理解可能会单独写一篇思考。

构建系统 Turborepo

yarn 和 pnpm 作为包管理工具,他们有一块衍生功能是 packages 的管理能力,成本比较低,非常容易在既有的 repo 上用起来。不过 yarn 和 pnpm 不是专业做 monorepo 工具的,提供的功能比较有限,所以选用了专门的构建方式。

选型方面的主要竞品有 Rx 的 Lerna、微软的 Rush.js等。Turborepo 目前是 Vercel 维护的商业开源项目,由于出来的晚,可以说是集成了多个竞品的优势。官方致敬开源库列表 其实这些构建方式都有构建缓存这个相较于包管理工具原生开发最重要的功能,选用turbo主要还是挑一个吹的最好的看好它的高速发展。

本地调试 Storybook

单元测试 Vitest

打包工具 Vite

打包工具主要是在 Rspack 和 Vite 之间选择,看了一些测试数据后感觉Rspack还是更适合需要频繁热更新的业务项目一点,做库这种还是 rollup 及其上层封装的 vite 更合适。

CSS样式 Import CSS

  1. Import css 方式(scss / less) 进行样式基础开发

  2. 基于 css variable 实现主题定制方案

    • 预设一套基于 css variable 的全局主题变量自定义 UI 主题
    • 针对单个组件预设一套 css variable 来自定义组件 UI
  3. 组件 css class 前缀

@class-prefix-button: ~'adm-button';

.@{class-prefix-button} {
    xxx
}

各方案对比: