本文档涵盖了 shadcn-ui 组件系统的构建过程、持续集成工作流和发布管理。它解释了组件如何被处理成注册表,如何通过 GitHub Actions 自动化发布,以及开发者如何创建自定义组件注册表。
有关组件安装和 CLI 使用的信息,请参阅 CLI 工具。有关组件注册表结构和分发的详细信息,请参阅 组件注册表系统。
注册表构建系统将源代码组件转换为 CLI 可以使用的可分发 JSON 元数据。此过程主要通过 build-registry.mts 脚本进行管理,涉及多个编译和转换阶段。
源文件: apps/v4/scripts/build-registry.mts9-178
buildRegistryIndex() 函数创建了一个全面的 TypeScript 索引文件,该文件支持在开发和文档生成过程中进行动态组件加载。
生成的索引文件包含
React.lazy() 进行的动态 React 组件导入源文件: apps/v4/scripts/build-registry.mts9-69
buildRegistryJsonFile() 函数将内部注册表格式转换为 CLI 工具使用的公共 JSON schema。
| 功能 | 输入 | 输出 | 目的 |
|---|---|---|---|
buildRegistryJsonFile() | registry.items | registry.json | CLI 可用格式 |
buildRegistry() | registry.json | public/r/styles/ | Web 可访问的 JSON 文件 |
syncRegistry() | apps/www/public/r/ | apps/v4/public/r/ | 跨应用一致性 |
转换过程包括
registry/new-york-v4/ 前缀源文件: apps/v4/scripts/build-registry.mts71-96 apps/v4/scripts/build-registry.mts98-112
该项目使用 GitHub Actions 和 Changesets 进行版本管理,实现了自动发布工作流。该系统支持稳定发布和 Beta 预发布进行测试。
源文件: .github/workflows/release.yml1-54 .github/workflows/prerelease.yml1-61
稳定发布工作流在每次推送到主分支时触发,并使用 Changesets 进行版本管理。
release.yml 中的关键工作流步骤
pnpm shadcn:build 以确保包构建成功所需的环境变量
GITHUB_TOKEN:用于创建版本 PRNPM_TOKEN:用于发布到 NPM 注册表NODE_ENV:设置为 "production" 以进行发布构建源文件: .github/workflows/release.yml40-53
Beta 发布通过向拉取请求添加 🚀 autorelease 标签来触发,以实现对未发布更改的测试。
Beta 工作流
package.json 的版本号,添加 Beta 后缀源文件: .github/workflows/prerelease.yml12-48 .github/workflows/prerelease-comment.yml1-66
发布系统与单仓库项目的包管理集成
| 命令 | 目的 | 工作区 |
|---|---|---|
pnpm shadcn:build | 构建 CLI 包 | packages/shadcn |
pnpm pub:beta | 发布 Beta 版本 | packages/shadcn |
npx changeset publish | 发布稳定版 | 根工作区 |
pnpm registry:build | 构建组件注册表 | apps/www, apps/v4 |
源文件: .github/workflows/release.yml40 .github/workflows/prerelease.yml48
syncRegistry() 函数通过同步其公共注册表目录,来维护主文档网站(apps/www)和 v4 应用程序之间的一致性。
此同步确保
源文件: apps/v4/scripts/build-registry.mts114-141
构建系统将组件文件从其源位置处理到可分发的注册表格式。注册表中的每个组件条目都包含文件路径、依赖项和元数据。
构建过程处理三种类型的文件引用
源文件: apps/v4/scripts/build-registry.mts19-46
每个注册表项在构建过程中都经过元数据转换
| 元数据字段 | 来源 | 处理方式 | 输出 |
|---|---|---|---|
名称 | 注册表定义 | 直接复制 | 组件标识符 |
类型 | 注册表定义 | 直接复制 | registry:ui, registry:block, 等 |
files | 注册表定义 | 路径前缀 | 公共文件引用 |
dependencies | 注册表定义 | 直接复制 | NPM 依赖 |
registryDependencies | 注册表定义 | 直接复制 | 内部组件依赖 |
cssVars | 注册表定义 | 直接复制 | 主题变量 |