首页/新闻资讯/正文详情

如何为Kumo开发一个新组件:脚手架、注册表与测试全流程详解

发布时间:2026/9/26 9:16:41 来源:云帆数科 栏目:资讯中心
如何为Kumo开发一个新组件:脚手架、注册表与测试全流程详解
如何为Kumo开发一个新组件脚手架、注册表与测试全流程详解【免费下载链接】kumoCloudflares component library for building modern web applications.项目地址: https://gitcode.com/gh_mirrors/kumo5/kumoKumo 是 Cloudflare 开源的 React 组件库cloudflare/kumo基于 Base UI Tailwind CSS v4 构建内置一套完整的组件开发体系Plop 组件脚手架、机器可读的组件注册表Registry代码生成、以及 Vitest 自动化测试。本文将带你走通 Kumo 新组件开发全流程——从一键脚手架到 Variants 标准、注册表元数据生成再到单元测试与构建校验帮助新手快速上手 Kumo 组件库开发。一、认识 Kumo一个工程化拉满的 React 组件库Kumo 采用 pnpm monorepo 组织核心工作区包括packages/kumo组件库本体39 个 UI 组件ESM-only、按组件 tree-shakeablepackages/kumo-docs-astroAstro 构建的官方文档站演示示例会喂给注册表packages/kumo-figmaFigma 插件从源码同步设计令牌packages/kumo-screenshot-worker文档截图 Worker库的整体结构、目录职责与开发约定都记录在 packages/kumo/AGENTS.md 中是开发前最值得通读的一份地图。二、环境准备两条命令搭好 Kumo 开发环境克隆仓库后只需安装依赖并执行一次完整构建即可git clone https://gitcode.com/gh_mirrors/kumo5/kumo cd kumo pnpm install pnpm build 日常开发时可以用pnpm dev开启 watch 模式改动即自动重新打包。更多入门细节见 CONTRIBUTING.md。三、组件脚手架pnpm new:component 一键生成完整骨架Kumo 的脚手架由 plopfile.js 定义对应的 npm script 在 package.json 中声明pnpm new:component按提示输入组件名如my-widget脚手架会自动完成6 件事创建 3 个新文件基于 Handlebars 模板见 plop-templates/component.tsx.hbssrc/components/my-widget/my-widget.tsx—— 组件实现src/components/my-widget/index.ts—— 组件导出src/components/my-widget/my-widget.test.tsx—— 单元测试骨架见 component.test.tsx.hbs更新 3 个入口文件通过PLOP_INJECT_EXPORT、PLOP_INJECT_COMPONENT_ENTRY等标记注释精准插入plopfile.jssrc/index.ts —— 主 barrel 导出vite.config.ts —— 新增components/my-widget构建入口package.json —— 新增./components/my-widget导出路径含类型声明生成后即可通过两种方式导入import { MyWidget } from cloudflare/kumo; import { MyWidget } from cloudflare/kumo/components/my-widget; // 按需路径⚠️ 项目明确反模式手动创建组件文件会遗漏上述入口更新请务必使用pnpm new:component。四、编写组件Variants 标准与样式约定Kumo 对每个组件有一套被 lint 强制执行的Variants 标准规则kumo/enforce-variant-standard见 lint/enforce-variant-standard.js。组件文件必须导出三个对象完整规范见 src/components/AGENTS.md// 1. 机器可读的样式选项变体、尺寸、形状… export const KUMO_MY_WIDGET_VARIANTS { variant: { primary: { classes: bg-kumo-elevated, description: 主操作 } }, } as const; // 2. 默认值键必须引用上面的变体 export const KUMO_MY_WIDGET_DEFAULT_VARIANTS { variant: primary } as const; // 3. 可选Figma 插件元数据 export const KUMO_MY_WIDGET_STYLING { baseClasses: inline-flex ... } as const;样式铁律都有专门 lint 规则拦截✅ 只用语义化 tokenbg-kumo-base、text-kumo-default禁用原始 Tailwind 颜色kumo/no-primitive-colors✅禁用dark:前缀——明暗模式由 CSSlight-dark()自动切换kumo/no-tailwind-dark-variant✅ 类名合并一律用cn()工具className{cn(base-classes, className)}✅ 用forwardRef实现的组件必须设置displayName✅ Tailwind 类名必须静态可解析禁止leading-[${val}]这类动态拼接五、组件注册表从 TypeScript 类型到 AI 可消费的元数据Kumo 最有特色的设计是组件注册表构建时自动把每个组件的 Props、变体、示例代码编译成 JSON 元数据ai/component-registry.json Markdown Zod 校验 schema供 AI 工具和 CLI 消费。代码生成管线入口是 scripts/component-registry/index.ts流程为src/components/ 自动发现组件 ↓ ts-json-schema-generator 从 TS 类型推导 Props ↓ 富化Variants 描述 文档站 Demo 示例 子组件 ↓ 输出 ai/component-registry.{json,md} ai/schemas.ts手动触发生成的命令pnpm codegen:registry几个工程细节基于文件哈希的增量缓存未变组件直接跳过、8 路并行处理、类型推导失败时静默降级为仅变体元数据。注意ai/目录下的产物全部自动生成严禁手改——改源码CI 会重新生成。六、测试与验证单元测试 结构性校验 构建门禁Kumo 的测试体系分三层覆盖从组件行为正确到包结构正确的完整链路1️⃣ 组件单元测试Vitest happy-dom脚手架已生成测试骨架在生成的my-widget.test.tsx中补充断言后运行pnpm test浏览器级行为如弹窗动画、组合键交互则编写*.browser.test.tsx用pnpm test:browser在 Playwright 中执行。配置见 vitest.config.ts。2️⃣ 结构性导出校验tests/imports/export-path-validation.test.ts 会校验package.json的 exports、vite.config.ts构建入口、实际产物三者一致——这正是脚手架自动改这 3 个文件的原因。单独运行pnpm test:exports。3️⃣ 完整构建三步管线pnpm build构建依次执行注册表代码生成 → CSS 处理css-build.ts→ Vite 双 pass 打包JS 产物 独立 d.ts 声明每个 chunk 自动注入use client前缀以兼容 RSC。七、避坑清单Kumo 组件开发的常见反模式反模式后果正确做法手动创建组件文件遗漏 index/vite/package.json 更新pnpm new:component手写ai/component-registry.*构建时被覆盖改组件源码CI 自动生成硬编码颜色 / 使用dark:破坏主题体系使用kumo-*语义 token裸className字符串丢失调用方透传样式cn(base, className)缺少displayNameReact DevTools 显示异常forwardRef 后设置八、收尾提交前别忘了 Changeset测试与构建全部通过后为变更添加 changeset用于自动生成 changelog 与版本pnpm changeset git add .changeset/*.md之后按 CONTRIBUTING.md 的 PR 流程提交即可——kumo仓库强制 squash merge并会在合并后由 Changesets 机器人自动发布版本。总结Kumo 新组件开发 一条pnpm new:component脚手架命令 遵守 Variants 标准编码 pnpm codegen:registry生成注册表 pnpm test pnpm build双重验证。整套流程高度自动化让开发者把精力集中在组件本身的设计与实现上。【免费下载链接】kumoCloudflares component library for building modern web applications.项目地址: https://gitcode.com/gh_mirrors/kumo5/kumo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

MySQL从安装到高效:索引优化、慢查询与锁表排查实战指南
MySQL从安装到高效:索引优化、慢查询与锁表排查实战指南

1. 装得上还得连得上:安装选型、初始密码与 ERROR 2002 排查绝大多数人卡在 MySQL 上的第一道坎,其实跟 SQL 本身没什么关系。项目跑起来、表建好了、代码里jdbc也写了,结果mysql -uroot -p回车,屏幕上给你甩一句ERROR 2002 (HY00… · 2026/9/26 9:16:41

参考文献格式总出错?交稿前按这 10 项检查
参考文献格式总出错?交稿前按这 10 项检查

参考文献格式总出错?交稿前按这 10 项检查 交论文前最崩溃的是什么?不是写不出来,而是格式反复被导师打回来改!明明内容都写完了,结果因为文中引用、参考文献、版式这些细节,硬生生把交稿时间拖到了最后一… · 2026/9/26 9:16:35

bilibili-downloader 命令行工具:4K 视频批量下载与 ffmpeg 合并实战
bilibili-downloader 命令行工具:4K 视频批量下载与 ffmpeg 合并实战

1. 为什么我最终选择了 bilibili-downloader 而不是浏览器插件先说结论:如果你只是偶尔存一两个短视频,浏览器插件确实够用;但一旦涉及 4K 画质、批量下载、字幕同步、充电专属内容这些需求,插件基本就歇菜了。我自己折腾过不下十… · 2026/9/26 9:16:35

ChatGPT 一本正经的胡说八道 那也看看原理吧
ChatGPT 一本正经的胡说八道 那也看看原理吧

最近,ChatGPT横空出世。这款被马斯克形容为“强大到危险”的AI,不但能够与人聊天互动,还能写文章、改代码。于是,人们纷纷想让AI替自己做些什么,有人通过两分钟的提问便得到了一篇完美的论文,有人希望它能帮… · 2026/9/26 9:59:35

Python分析随机变量与概率分布
Python分析随机变量与概率分布

在概率论与统计学的学习中,随机变量与概率分布是非常基础且重要的概念。掌握这些内容有助于理解和处理不确定性事件,在编程与数据分析中尤为重要。通过学习随机变量与概率分布,可以有效地建模不确定性现象,并结合概率知识进行数据分析。 本教程将介绍两类主要的随机变量:… · 2026/9/26 9:59:35

Python解析条件概率与独立性
Python解析条件概率与独立性

在概率论中,条件概率和独立性是两个至关重要的概念。它们是处理不确定性和复杂系统中事件关系的基础。在许多实际问题中,需要通过条件概率来评估一个事件在已知其他事件发生的前提下的概率。这种关系在很多场景中都有实际应用,比如医疗诊断、金融市场预测和机器学习模型中。… · 2026/9/26 9:59:35

Python分析离散程度
Python分析离散程度

在数据分析和统计学中,离散程度是衡量数据分布的重要指标。它描述了数据相对于中心位置的散布程度,即数据在平均值或中位数周围分散的程度。理解和应用这些度量有助于掌握数据的波动性,并为进一步的分析提供依据。 离散程度的度量方式多种多样,常见的包括极差、四分位差、… · 2026/9/26 9:59:35

Python度量集中趋势
Python度量集中趋势

在数据分析和统计学中,集中趋势的度量是至关重要的概念。它能够帮助理解数据的中心点,以及如何通过数值来概述数据的总体情况。对于自学编程的人来说,掌握这些基本概念不仅有助于更好地理解数据,还能够在数据科学和机器学习等领域中发挥重要作用。 本文将介绍集中趋势的几… · 2026/9/26 9:59:35

构建 PDF 文档对话 Agent Harness 的关键技术:TaoToken 统一 Key 接入与配置骨架
构建 PDF 文档对话 Agent Harness 的关键技术:TaoToken 统一 Key 接入与配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 9:59:29

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码