添加一个区块
为区块库贡献组件。
我们邀请社区为 区块库 贡献您的组件和区块,与其他开发者分享,帮助构建一个高质量、可重用组件的库。
我们希望看到各种类型的区块:应用、营销、产品等等。
设置您的工作空间
派生仓库
git clone https://github.com/shadcn-ui/ui.git
创建新分支
git checkout -b username/my-new-block
安装依赖
pnpm install
启动开发服务器
pnpm www:dev
添加一个区块
一个区块可以是一个单一组件(如一个 UI 组件的变体)或一个复杂组件(如一个仪表盘),包含多个组件、钩子和工具。
创建新的区块
在 apps/www/registry/new-york/blocks
目录下创建一个新文件夹。确保文件夹使用 kebab-case 命名,并位于 new-york
下。
apps
└── www
└── registry
└── new-york
└── blocks
└── dashboard-01
注意: 构建脚本会处理 default
样式的区块构建。
添加您的区块文件
将您的文件添加到区块文件夹。以下是一个包含页面、组件、钩子和工具的区块示例。
dashboard-01
└── page.tsx
└── components
└── hello-world.tsx
└── example-card.tsx
└── hooks
└── use-hello-world.ts
└── lib
└── format-date.ts
注意: 您可以从一个文件开始,稍后添加更多文件。
将您的区块添加到注册表
将您的区块定义添加到 registry-blocks.tsx
要将您的区块添加到注册表,您需要将区块定义添加到 registry-blocks.ts
。
这遵循注册表模式 https://ui.shadcn.com/schema/registry-item.json。
export const blocks = [
// ...
{
name: "dashboard-01",
author: "shadcn (https://ui.shadcn.com)",
title: "仪表盘",
description: "一个简单的仪表盘,包含一个 hello world 组件。",
type: "registry:block",
registryDependencies: ["input", "button", "card"],
dependencies: ["zod"],
files: [
{
path: "blocks/dashboard-01/page.tsx",
type: "registry:page",
target: "app/dashboard/page.tsx",
},
{
path: "blocks/dashboard-01/components/hello-world.tsx",
type: "registry:component",
},
{
path: "blocks/dashboard-01/components/example-card.tsx",
type: "registry:component",
},
{
path: "blocks/dashboard-01/hooks/use-hello-world.ts",
type: "registry:hook",
},
{
path: "blocks/dashboard-01/lib/format-date.ts",
type: "registry:lib",
},
],
categories: ["仪表盘"],
},
]
确保您添加名称、描述、类型、registryDependencies、dependencies、files 和 categories。我们将在即将发布的模式文档中详细介绍每个项。
运行构建脚本
pnpm registry:build
注意: 您不需要为每个更改运行此脚本。仅在您更新区块定义时运行它。
查看您的区块
一旦构建脚本完成,您可以在 http://localhost:3333/blocks/[CATEGORY]
查看您的区块,或者在 http://localhost:3333/view/styles/new-york/dashboard-01
查看全屏预览。

构建您的区块
您现在可以通过编辑区块文件夹中的文件来构建您的区块,并在浏览器中查看更改。
如果您添加了更多文件,请确保将它们添加到区块定义中的 files
数组中。
发布您的区块
一旦您准备好发布您的区块,可以向主仓库提交拉取请求。
运行构建脚本
pnpm registry:build
捕获截图
pnpm registry:capture
注意: 如果您之前运行过捕获脚本,可能需要删除 apps/www/public/r/styles/new-york
中现有的截图(光明和黑暗模式),然后再次运行脚本。
提交拉取请求
提交您的更改,并向主仓库提交拉取请求。
您的区块将被审核并合并。一旦合并,它将被发布到网站,并可以通过 CLI 安装。
类别
categories
属性用于在注册表中组织您的区块。
添加类别
如果您需要添加一个新类别,可以通过将其添加到 apps/www/registry/registry-categories.ts
中的 registryCategories
数组来实现。
export const registryCategories = [
// ...
{
name: "输入",
slug: "input",
hidden: false,
},
]
指导原则
以下是贡献于区块库时应遵循的一些指导原则。
- 区块定义所需的属性:
name
、description
、type
、files
和categories
。 - 确保在
registryDependencies
中列出所有注册依赖项。注册依赖项是注册表中组件的名称,如input
、button
、card
等。 - 确保在
dependencies
中列出所有依赖项。依赖项是注册表中包的名称,如zod
、sonner
等。 - 如果您的区块有页面(可选),则应是
files
数组中的第一个条目,并且应该有target
属性。这有助于 CLI 将页面放置在文件路由的正确位置。 - 导入应该始终使用
@/registry
路径。 例如import { Input } from "@/registry/new-york/input"