- 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
- Direction
- Drawer
- Dropdown Menu
- Empty
- Field
- Hover Card
- Input
- Input Group
- Input OTP
- Item
- Kbd
- Label
- Menubar
- Native Select
- Navigation Menu
- Pagination
- Popover
- Progress
- Radio Group
- Resizable
- Scroll Area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Sonner
- Spinner
- Switch
- Table
- Tabs
- Textarea
- Toast
- Toggle
- Toggle Group
- Tooltip
- Typography
到目前为止,在 monorepo 中使用 shadcn/ui 多少有点麻烦。你可以通过 CLI 添加组件,但需要自己管理组件的安装位置,并手动修正导入路径。
借助 CLI 新增的 monorepo 支持,在 monorepo 中使用 shadcn/ui 已经容易很多了。
CLI 现在能够理解 monorepo 结构,并把组件、依赖和注册库依赖安装到正确路径,同时替你处理导入。
开始使用
创建新的 monorepo 项目
要创建新的 monorepo 项目,请在 init 命令中使用 --monorepo 标志。
pnpm dlx shadcn@latest init --monorepo
然后选择你想使用的模板。
? Select a template ›
❯ Next.js
Vite
TanStack Start
React Router
Astro这会创建一个带有两个工作区:web 和 ui 的新 monorepo 项目,并使用 Turborepo 作为构建系统。
一切都会为你配置好,因此你可以直接开始向项目中添加组件。
向项目添加组件
要向项目添加组件,请在你的应用路径中运行 add 命令。
cd apps/webpnpm dlx shadcn@latest add [COMPONENT]
CLI 会判断你正在添加什么类型的组件,并把正确的文件安装到正确的路径中。
例如,如果你运行 npx shadcn@latest add button,CLI 会把按钮组件安装到 packages/ui 下,并更新 apps/web 中组件的导入路径。
如果你运行 npx shadcn@latest add login-01,CLI 会把 button、label、input 和 card 组件安装到 packages/ui 下,并把 login-form 组件安装到 apps/web/components 下。
导入组件
You can import components from the @workspace/ui package as follows:
import { Button } from "@workspace/ui/components/button"You can also import hooks and utilities from the @workspace/ui package.
import { useTheme } from "@workspace/ui/hooks/use-theme"
import { cn } from "@workspace/ui/lib/utils"文件结构
当你创建一个新的 monorepo 项目时,CLI 会创建如下文件结构:
apps
└── web # 你的应用放在这里。
├── app
│ └── page.tsx
├── components
│ └── login-form.tsx
├── components.json
└── package.json
packages
└── ui # 你的组件和依赖会安装在这里。
├── src
│ ├── components
│ │ └── button.tsx
│ ├── hooks
│ ├── lib
│ │ └── utils.ts
│ └── styles
│ └── globals.css
├── components.json
└── package.json
package.json
turbo.json要求
-
每个工作区都必须有一个
components.json文件。package.json文件告诉 npm 如何安装依赖,components.json文件告诉 CLI 如何以及安装到哪里。 -
components.json文件必须为工作区正确定义别名,这会告诉 CLI 如何导入组件、Hooks、工具函数等。
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "radix-nova",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "",
"css": "../../packages/ui/src/styles/globals.css",
"baseColor": "neutral",
"cssVariables": true
},
"iconLibrary": "lucide",
"aliases": {
"components": "@/components",
"hooks": "@/hooks",
"lib": "@/lib",
"utils": "@workspace/ui/lib/utils",
"ui": "@workspace/ui/components"
}
}{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "radix-nova",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "",
"css": "src/styles/globals.css",
"baseColor": "neutral",
"cssVariables": true
},
"iconLibrary": "lucide",
"aliases": {
"components": "@workspace/ui/components",
"utils": "@workspace/ui/lib/utils",
"hooks": "@workspace/ui/hooks",
"lib": "@workspace/ui/lib",
"ui": "@workspace/ui/components"
}
}-
确保两个
components.json文件中的style、iconLibrary和baseColor保持一致。 -
对于 Tailwind CSS v4,请在
components.json文件中保持tailwind配置为空。
遵循这些要求后,CLI 就能把 ui 组件、blocks、libs 和 hooks 安装到正确路径,并替你处理导入。