Skip to content

前端娱乐圈?又来一个组件库?我们做了组件库才明白这是有意义的!

在开始开发 Versakit 之前,我们也曾有过同样的疑问:市面上已经有这么多优秀的组件库了,为什么还要做「又一个组件库」?前端领域常被戏称为「娱乐圈」,每天都有新的框架和工具涌现,这些重复的轮子真的在推动技术进步吗?

为什么要做「又一个组件库」?

前端领域常被戏称为「娱乐圈」——每天都有新框架、新工具涌现。我们曾困惑:这真的是在推动技术进步吗?直到亲身开发组件库后,我们才理解:每一次技术探索都是对工程本质的回归。

阶段成果速览 🏹

  • 30+  基础组件开发完成
  • CLI 工具链建设中
  • 富文本编辑器+Markdown渲染附属项目启动
  • 每周 npm 下载量突破 100+

一、架构设计三亮点 🚀

  1. 渐进式主题系统

暗黑模式:prefers-color-scheme + CSS Variables 双引擎驱动 色彩阶梯:colors.ts 中 0-10 色阶的数学化建模 智能适配:按钮文字颜色自动对比度校验(WCAG 2.1 标准)

  1. 类型安全体系

精准的类型提示:

typescript
type ButtonSize = 'sm' | 'md' | 'lg' | { custom: string }

Props 泛型约束:类型守卫保障合法字段 事件溯源:emit 类型系统实现事件流追踪

  1. 工程化实践
  • Monorepo 架构:模块边界清晰化
  • 原子化 CSS:Unocss 实现样式零冗余
  • 自动化流水线:脚本化构建流程提升 3 倍效率

二、核心竞争优势

能力维度Versakit 方案竞品常见方案
主题定制CSS 变量 + 运行时动态注入SASS 变量 / 全局 CSS 覆盖
类型系统深度TypeScript 集成基础 PropTypes 校验
包体积按需加载 + Tree-shaking全量引入
组件通信Provide/Inject 上下文体系独立 Props 传递
可测试性Vitest + Testing Library 整合Vitest 单测为主

三、潜在亮点挖掘

  1. 交互状态机设计
typescript
const stateMachine = {
	initial: 'idle',
	states: {
		idle: { on: { HOVER: 'hover' } },
		hover: { on: { PRESS: 'active' } },
		active: { on: { RELEASE: 'idle' } },
	},
}
  1. 可访问性增强

检测到 ARIA 属性的部分实现 可扩展方向:

vue
<button
	role="switch"
	:aria-checked="isChecked"
	:aria-disabled="disabled"
></button>
  1. 性能优化策略 静态 DOM 分析:v-once 在卡片组件中的应用 异步插槽渲染:检测到 $slots 的动态加载判断 样式隔离::where() 选择器的使用减少特异性

也许我们的组件库不会被很多人所使用,不会很出名,不会有什么功利上的作用,但是,通过做这件事情,我们真真切切体会到了什么是一个合格的前端工程师!

开发组件库教会我们的事

打破「增删改查」困局 作为在校学生团队,我们曾困于业务开发的表层逻辑。组件库开发让我们深入理解:

1. 前端工程化闭环 🛠️

 从脚手架搭建到 CI/CD 流水线,完整走通「开发-构建-测试-发布」全链路。实践出真知:

2. 软件工程思维升级 🪜

设计模式:工厂模式创建组件实例 架构设计:插件系统实现横向扩展 代码规范:ESLint + Prettier 保障代码一致性

3. 基础能力重构 💡

CSS 层叠奥秘::where() 选择器实现样式隔离 状态管理:基于 Proxy 的轻量级响应式系统 渲染优化:虚拟滚动性能提升 5 倍+

4. 团队协作范式 🤝

  • Git Flow 工作流
  • RFC 提案机制
  • 代码 Review 文化

我们接下来要做什么?

无头组件 + 主题系统的化学效应

传统组件库的样式覆盖如同「开盲盒」,而 PrimeVue 的 Unstyled Mode 给出新思路: 经常使用或关注Nuxt的朋友应该或多或少有接触过PrimeVue这个库,在我们团队看来这是Vue生态中无头组件(Headless Components)  和 主题系统 融合的很好的解决方案,所以受到他们的启发,我们也决定接下来在我们的组件库中集成类似的解决方案