本文档全面概述了 shadcn-ui 存储库,这是一个组件系统,提供可直接复制粘贴的 UI 组件,而非传统的 npm 包。该系统包含一个单体仓库,其中有文档网站、用于组件管理的 CLI 工具以及基于注册表的发行系统。
有关 CLI 工具功能的详细信息,请参阅 CLI 工具。有关组件库的详细信息,请参阅 组件系统。有关构建和发行流程的信息,请参阅 构建与发行。
shadcn/ui 是一个在根本上不同于传统组件库的组件系统。开发者不是将组件安装为 npm 依赖项,而是将实际源代码直接复制到他们的项目中。这种方法提供了几个优点:
该系统建立在 Radix UI 原语之上,以实现可访问性和功能性,并使用 Tailwind CSS 进行样式设计,通过基于 Web 的注册表进行分发。
来源: packages/shadcn/package.json1-99 packages/cli/CHANGELOG.md1-6 packages/shadcn/CHANGELOG.md1-10
该单体仓库使用 pnpm 和 workspace 配置,并使用 Turborepo 进行构建编排。
该单体仓库使用 pnpm 和 workspace 配置,并使用 Turborepo 进行构建编排。
| 工具 | 目的 | 配置 |
|---|---|---|
pnpm | 包管理器 | package.json51 |
turbo | 构建编排 | package.json16-49 |
| 工作区 | 单体仓库结构 | package.json11-14 |
来源: package.json1-90 pnpm-lock.yaml1-114
主要的文档网站,使用 Next.js 和 Contentlayer 构建。
关键脚本和功能
dev:开发服务器,端口 3333build:registry:生成组件注册表 JSON 文件registry:capture:组件文档的截图下一代文档站点,具有增强功能
与 apps/www 的主要区别
来源: apps/www/package.json1-128 apps/v4/package.json1-154
当前 CLI 工具分发为 shadcn npm 包
主要功能
shadcn (v2.6.0)init、add、registry:build为兼容性维护的旧版 CLI 工具
shadcn-ui (v0.9.5)来源: packages/shadcn/package.json1-99 packages/cli/package.json1-46 packages/shadcn/CHANGELOG.md3-10
shadcn/ui 系统使用独特的基于注册表的发行模式。
注册表生成过程将源代码组件转换为可发行的 JSON。
apps/www/registry/ 和 apps/v4/registry/ 中build-registry.mts 脚本处理组件文件public/r/styles/ 目录中__registry__/index.tsx 提供组件目录当用户运行 shadcn add <component> 时
来源: apps/www/package.json9-11 apps/v4/package.json15-16 packages/shadcn/package.json49-50
| 类别 | 包 | 版本 | 目的 |
|---|---|---|---|
| 框架 | next | 14.3.0/15.3.1 | React 框架 |
| UI 原语 | @radix-ui/* | 最新版 | 可访问组件 |
| 样式 | tailwindcss | 3.4.6/4.1.8 | 实用 CSS |
| 图标 | lucide-react | 0.474.0/0.477.0 | 图标库 |
| 状态管理 | jotai | 2.1.0+ | 状态管理 |
| 表单 | react-hook-form | 7.54.2 | 表单处理 |
| 工具 | 目的 | 配置 |
|---|---|---|
typescript | 类型检查 | 多个版本(4.9.5-5.7.3) |
eslint | 代码 Linting | package.json64-69 |
prettier | 格式化 | prettier.config.cjs1-36 |
tsup | 包构建 | CLI 包 |
contentlayer2 | MDX 处理 | 文档网站 |
该仓库支持多种开发环境
来源: pnpm-lock.yaml115-397 package.json15-49 apps/www/package.json22-99 apps/v4/package.json19-95