- 手风琴
- 提示
- 警告对话框
- 宽高比
- 头像
- 徽章
- 面包屑导航
- 按钮
- 按钮组
- 日历 Calendar
- 卡片
- Carousel
- 图表 Chart
- 复选框
- 折叠面板
- 组合框
- 命令
- 上下文菜单
- 数据表格 Data Table
- 日期选择器 Date Picker
- 对话框 Dialog
- 抽屉
- 下拉菜单
- Empty
- 字段
- 悬停卡片
- 输入
- 输入组
- 输入 OTP
- 项目
- Kbd
- 标签
- 菜单栏
- 原生选择框
- 导航菜单 Navigation Menu
- 分页
- 弹出框
- 进度 Progress
- 单选框组
- 可调整大小
- 滚动区域 Scroll Area
- 选择框
- 分隔符 Separator
- 侧边栏 Sheet
- 侧边栏 Sidebar
- 骨架屏
- 滑块
- Sonner
- 加载指示器 Spinner
- 开关
- 表格
- 标签页 Tabs
- 文本域
- 吐司
- 切换按钮 Toggle
- 切换组
- 提示 Tooltip
- 排版
直到现在,在 monorepo 中使用 shadcn/ui 还是有点麻烦。你可以使用 CLI 添加组件,但你必须管理组件安装的位置,并手动修正导入路径。
通过 CLI 中新增的 monorepo 支持,我们让在 monorepo 中使用 shadcn/ui 变得轻松许多。
CLI 现在能够理解 monorepo 结构,会将组件、依赖和注册依赖安装到正确的路径,并帮你处理导入。
快速开始
创建一个新的 monorepo 项目
要创建一个新的 monorepo 项目,运行 init 命令。你将被提示选择你要创建的项目类型。
pnpm dlx shadcn@latest init
选择 Next.js (Monorepo) 选项。
? Would you like to start a new project?
Next.js
❯ Next.js (Monorepo)这将创建一个包含两个工作区 web 和 ui 的 monorepo 项目,并使用 Turborepo 作为构建系统。
一切都已为你设置好,所以你可以开始向项目添加组件了。
注意:该 monorepo 使用 React 19 和 Tailwind CSS v4。
向项目添加组件
要向项目添加组件,请在你的应用路径下运行 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。
导入组件
你可以从 @workspace/ui 包中导入组件,写法如下:
import { Button } from "@workspace/ui/components/button"你也可以从 @workspace/ui 包中导入 hooks 和工具函数。
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": "new-york",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "",
"css": "../../packages/ui/src/styles/globals.css",
"baseColor": "zinc",
"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": "new-york",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "",
"css": "src/styles/globals.css",
"baseColor": "zinc",
"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 组件、区块、库和 hooks 安装到正确的路径,并帮你管理导入。