← [ BACK_TO_NOTES ]

shadcn/ui 组件库

shadcn/ui 的源码分发模式、组件依赖与更新责任,以及 Tailwind 主题和变体的配合。

#resource #growing #frontend #react

[!info] related notes

shadcn/ui 组件库

核心理念

传统组件库(Ant Design、Material UI)通过 npm install 引入打包后的 JS。shadcn/ui 反其道:把组件源码复制到你的项目里。

好处:

  • 源码就是你的代码,随意改
  • 只包含你实际使用的组件
  • 组件源码可独立修改,但更新上游源码时仍需审阅并合并本地定制
  • CLI 会按组件需要安装依赖;源码分发不等于没有 node_modules 依赖

使用方式

已有项目先按对应框架指南检查 Tailwind、路径别名及配置;CLI 初始化会修改配置和安装依赖。下列命令使用当前 CLI 包名 shadcn:

npx shadcn@latest init
npx shadcn@latest add button card input

生成路径由 components.json 和项目别名决定,并非固定写入 /components/ui。React 的组件源码与 Vue 移植版不能直接互换。

组件变体

以下为用 class-variance-authority 定义变体的独立简化示例;不是某个版本生成组件的完整源码:

import { cva } from "class-variance-authority";

const buttonVariants = cva("inline-flex items-center", {
  variants: {
    variant: {
      default: "bg-primary text-primary-foreground",
      destructive: "bg-destructive text-destructive-foreground",
      outline: "border border-input",
      ghost: "hover:bg-accent",
    },
    size: {
      default: "h-10 px-4 py-2",
      sm: "h-9 px-3",
      lg: "h-11 px-8",
    },
  },
});

与 Tailwind CSS 4.x 配合

Tailwind CSS 4.x 使用 CSS-first 配置。主题变量可通过 @theme inline 映射到工具类,下面仅示范主色:

:root {
  --primary: oklch(0.65 0.24 275);
  --primary-foreground: white;
}
@theme inline {
  --color-primary: var(--primary);
  --color-primary-foreground: var(--primary-foreground);
}

修改这些变量会影响使用对应 token 的组件;完整主题还包含背景、文字、边框等变量及暗色覆盖。主题映射不等于自动启用 .dark,详见 主题与 token 和 暗色模式。

定制

组件源码由项目维护,可直接修改或包装。依赖升级、重新生成源码和可访问性回归都仍需验证:

// components/ui/button.tsx
// 改默认样式、加新变体、调整布局,随意

与 Ant Design 的对比

维度shadcn/uiAnt Design
安装方式复制源码npm install
定制直接改源码主题 token
包体积取决于所选组件、依赖及构建取决于导入方式及构建
设计语言中性Ant Design 风格

选型应结合所需组件、设计语言、已有团队经验和后续源码维护成本,不能仅凭“定制”或“快速”二选一。

来源

创建于 2026/6/25 更新于 2026/10/6
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本