- 手风琴 (Accordion)
- 警告 (Alert)
- 警告对话框 (Alert Dialog)
- 宽高比 (Aspect Ratio)
- 头像 (Avatar)
- 徽章 (Badge)
- 面包屑 (Breadcrumb)
- 按钮 (Button)
- 按钮组 (Button Group)
- 日历 (Calendar)
- 卡片 (Card)
- 轮播图 (Carousel)
- 图表 (Chart)
- 复选框 (Checkbox)
- 折叠面板 (Collapsible)
- 组合框 (Combobox)
- 命令面板 (Command)
- 上下文菜单 (Context Menu)
- 数据表格 (Data Table)
- 日期选择器 (Date Picker)
- 对话框 (Dialog)
- 抽屉 (Drawer)
- 下拉菜单 (Dropdown Menu)
- 空状态 (Empty)
- 字段 (Field)
- 表单 (Form)
- 悬停卡片 (Hover Card)
- 输入框 (Input)
- 输入组 (Input Group)
- 验证码输入 (Input OTP)
- 项 (Item)
- 键盘按键 (Kbd)
- 标签 (Label)
- 菜单栏 (Menubar)
- 原生选择器 (Native Select)
- 导航菜单 (Navigation Menu)
- 数字输入框 (Number Field)
- 分页 (Pagination)
- 引脚输入 (Pin Input)
- 气泡卡片 (Popover)
- 进度条 (Progress)
- 单选框组 (Radio Group)
- 范围日历 (Range Calendar)
- 可调整大小 (Resizable)
- 滚动区域 (Scroll Area)
- 选择器 (Select)
- 分隔线 (Separator)
- 侧边栏抽屉 (Sheet)
- 侧边栏 (Sidebar)
- 骨架屏 (Skeleton)
- 滑块 (Slider)
- 轻量提示 (Sonner)
- 加载动画 (Spinner)
- 步骤条 (Stepper)
- 开关 (Switch)
- 表格 (Table)
- 标签页 (Tabs)
- 标签输入 (Tags Input)
- 文本域 (Textarea)
- 吐司提示 (Toast)
- 切换按钮 (Toggle)
- 切换按钮组 (Toggle Group)
- 工具提示 (Tooltip)
- 排版 (Typography)
本指南将引导您完成设置个人组件注册表的过程。
假设您已经有一个包含组件的项目,并希望将其转化为注册表。
registry.json
如果您使用 shadcn-vue CLI 来构建注册表,则必须提供 registry.json 文件。
如果您使用其他构建系统,只要您的系统能够生成符合 registry-item 规范 的有效 JSON 文件,即可跳过此步骤。
添加 registry.json 文件
在项目根目录创建一个 registry.json 文件。您的项目可以是 Nuxt、Vite 或任何支持 Vue 的项目。
{
"$schema": "https://vue.shadcn.org.cn/schema/registry.json",
"name": "acme",
"homepage": "https://acme.com",
"items": [
// ...
]
}此 registry.json 文件必须符合 registry 规范。
添加注册表项
创建您的组件
添加您的第一个组件。以下是一个简单的 <HelloWorld /> 组件示例
<script setup lang="ts">
import { Button } from "@/components/ui/button"
</script>
<template>
<Button>Hello World</Button>
</template>注意: 此示例将组件放置在 registry/new-york 目录中。只要您在 registry.json 文件中设置了正确的路径并遵循 registry/[NAME] 的目录结构,您可以将其放在项目的任何位置。
registry
└── new-york
└── HelloWorld
└── HelloWorld.vue重要提示: 如果您将组件放在自定义目录中,请确保已在 tailwind.config.ts 文件中进行配置。
// tailwind.config.ts
export default {
content: ["./registry/**/*.{js,ts,jsx,tsx,vue}"],
}将组件添加到注册表
要将组件添加到注册表,您需要将组件定义添加到 registry.json 中。
{
"$schema": "https://vue.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/HelloWorld/HelloWorld.vue",
"type": "registry:component"
}
]
}
]
}您需要通过添加 name(名称)、type(类型)、title(标题)、description(描述)和 files(文件)来定义注册表项。
对于您添加的每个文件,都必须指定文件的 path(路径)和 type(类型)。path 是相对于项目根目录的文件路径。type 是文件类型。
您可以在 注册表项架构文档 中阅读有关注册表项规范和文件类型的更多信息。
构建您的注册表
安装 shadcn-vue CLI
注意:build 命令目前仅在 shadcn-vue@canary 版本的 CLI 中可用。
pnpm add shadcn-vue@latest
添加构建脚本
在 package.json 文件中添加一个 registry:build 脚本。
{
"scripts": {
"registry:build": "shadcn-vue build"
}
}运行构建脚本
运行构建脚本以生成注册表 JSON 文件。
pnpm registry:build
注意: 默认情况下,构建脚本会在 public/r 中生成注册表 JSON 文件,例如 public/r/hello-world.json。
您可以通过传递 --output 选项来更改输出目录。请参阅 shadcn-vue 构建命令 以获取更多信息。
托管您的注册表
如果您在 Nuxt 上运行注册表,现在可以通过运行 nuxt 服务器来托管它。其他框架的命令可能有所不同。
pnpm dev
您的文件现在将托管在 https://:3000/r/[NAME].json,例如 https://:3000/r/hello-world.json。
发布您的注册表
为了让其他开发者能够使用您的注册表,您可以将项目部署到公共 URL 来发布它。
添加身份验证
shadcn-vue CLI 没有提供内置的注册表身份验证方式。我们建议在您的注册表服务器端处理授权。
一种常见的简单方法是使用 token 查询参数来验证对注册表的请求。例如 https://: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(例如https://: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-vue CLI 安装注册表项,请使用 add 命令,后跟注册表项的 URL。
pnpm dlx shadcn-vue@latest add https://:3000/r/hello-world.json