- Accordion
- Alert
- Alert Dialog
- Aspect Ratio
- Avatar
- Badge
- Breadcrumb
- Button
- Calendar
- Card
- Carousel
- Chart
- Checkbox
- Collapsible
- Combobox
- Command
- Context Menu
- Data Table
- Date Picker
- Dialog
- Drawer
- Dropdown Menu
- React Hook Form
- Hover Card
- Input
- Input OTP
- Label
- Menubar
- Navigation Menu
- Pagination
- Popover
- Progress
- Radio Group
- Resizable
- Scroll-area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Sonner
- Switch
- Table
- Tabs
- Textarea
- Toast
- Toggle
- Toggle Group
- Tooltip
- Typography
本指南将引导您完成设置自己的组件注册表的过程。
它假设您已经有一个包含组件的项目,并希望将其转换为注册表。
如果您正在启动一个新的注册表项目,可以使用注册表模板作为起点。我们已为您配置好。
registry.json
只有当您使用shadcn
CLI 来构建注册表时,才需要registry.json
文件。
如果您使用的是不同的构建系统,只要您的构建系统生成符合注册表项 schema 规范的有效 JSON 文件,您就可以跳过此步骤。
添加 registry.json 文件
在项目根目录中创建registry.json
文件。您的项目可以是 Next.js、Remix、Vite 或任何其他支持 React 的项目。
{
"$schema": "https://ui.shadcn.org.cn/schema/registry.json",
"name": "acme",
"homepage": "https://acme.com",
"items": [
// ...
]
}
此registry.json
文件必须符合注册表 schema 规范。
添加注册表项
创建您的组件
添加您的第一个组件。这是一个简单的<HelloWorld />
组件示例
import { Button } from "@/components/ui/button"
export function HelloWorld() {
return <Button>Hello World</Button>
}
注意:此示例将组件放在registry/new-york
目录中。您可以将其放置在项目的任何位置,只要您在registry.json
文件中设置正确的路径,并且遵循registry/[NAME]
目录结构即可。
registry
└── new-york
└── hello-world
└── hello-world.tsx
将您的组件添加到注册表
要将您的组件添加到注册表,您需要将组件定义添加到registry.json
。
{
"$schema": "https://ui.shadcn.org.cn/schema/registry.json",
"name": "acme",
"homepage": "https://acme.com",
"items": [
{
"name": "hello-world",
"type": "registry:block",
"title": "Hello World",
"description": "A simple hello world component.",
"files": [
{
"path": "registry/new-york/hello-world/hello-world.tsx",
"type": "registry:component"
}
]
}
]
}
您可以通过添加name
、type
、title
、description
和files
来定义您的注册表项。
对于您添加的每个文件,您必须指定文件的path
和type
。path
是文件相对于项目根目录的相对路径。type
是文件类型。
您可以在注册表项 schema 文档中阅读更多关于注册表项 schema 和文件类型的信息。
构建您的注册表
安装 shadcn CLI
注意:build
命令目前仅在shadcn@canary
版本的 CLI 中可用。
pnpm add shadcn@canary
添加构建脚本
在您的package.json
文件中添加一个registry:build
脚本。
{
"scripts": {
"registry:build": "shadcn build"
}
}
运行构建脚本
运行构建脚本以生成注册表 JSON 文件。
pnpm registry:build
注意:默认情况下,构建脚本将在public/r
中生成注册表 JSON 文件,例如public/r/hello-world.json
。
您可以通过传递--output
选项来更改输出目录。有关更多信息,请参阅shadcn build 命令。
提供您的注册表服务
如果您在 Next.js 上运行注册表,现在可以通过运行next
服务器来提供注册表服务。其他框架的命令可能有所不同。
pnpm dev
您的文件现在将在http://localhost:3000/r/[NAME].json
提供服务,例如http://localhost:3000/r/hello-world.json
。
发布您的注册表
为了让其他开发者可以使用您的注册表,您可以通过将项目部署到公共 URL 来发布它。
添加认证
shadcn
CLI 不提供内置的方式为您的注册表添加认证。我们建议在您的注册表服务器上处理授权。
一种常见的简单方法是使用token
查询参数来认证对注册表的请求。例如http://localhost:3000/r/hello-world.json?token=[SECURE_TOKEN_HERE]
。
使用安全令牌认证请求,并在令牌无效时返回 401 未授权响应。shadcn
CLI 和Open in v0
都将处理 401 响应并向用户显示消息。
注意:请务必加密并设置令牌过期时间。
准则
以下是为注册表构建组件时应遵循的一些准则。
- 将您的注册表项放在
registry/[STYLE]/[NAME]
目录中。我以new-york
为例。只要它嵌套在registry
目录下,它可以是任何您想要的名称。 - 区块定义需要以下属性:
name
、description
、type
和files
。 - 请确保在
registryDependencies
中列出所有注册表依赖项。注册表依赖项是注册表中组件的名称,例如input
、button
、card
等,或者是注册表项的 URL,例如http://localhost:3000/r/editor.json
。 - 请确保在
dependencies
中列出所有依赖项。依赖项是注册表中包的名称,例如zod
、sonner
等。要设置版本,您可以使用name@version
格式,例如zod@^3.20.0
。 - 导入应始终使用
@/registry
路径。例如import { HelloWorld } from "@/registry/new-york/hello-world/hello-world"
- 理想情况下,将您的文件放在注册表项的
components
、hooks
、lib
目录中。
使用 CLI 安装
要使用shadcn
CLI 安装注册表项,请使用add
命令,后跟注册表项的 URL。
pnpm dlx shadcn@latest add http://localhost:3000/r/hello-world.json