本文档介绍了 shadcn CLI 工具中的依赖管理系统,特别是它如何处理包安装、包管理器检测以及 React 19 兼容性问题。该系统在安装过程中自动管理组件依赖,并智能处理对等依赖冲突。
有关项目配置和设置的信息,请参阅 配置。有关组件安装工作流的详细信息,请参阅 组件管理。
依赖管理系统集中在 updateDependencies 函数中,它处理跨不同包管理器安装 npm 包的复杂性,并为某些包生态系统中出现的 React 19 兼容性问题提供特殊支持。
该系统支持多种包管理器,具有自动检测和特定于包管理器的命令生成功能。
来源: packages/shadcn/src/utils/updaters/update-dependencies.ts33-99 packages/shadcn/test/utils/updaters/update-dependencies.test.ts15-138
| 包管理器 | Install 命令 | 开发依赖 | 特殊处理 |
|---|---|---|---|
| npm | install | -D 标志 | React 19 标志 |
| pnpm | add | -D 标志 | 无 |
| bun | add | -D 标志 | 无 |
| deno | add | -D 标志 | npm: 前缀 |
来源: packages/shadcn/src/utils/updaters/update-dependencies.ts65-96
该系统包含针对 React 19 对等依赖冲突的特殊处理,这是使用 npm 作为包管理器时的重大问题。
来源: packages/shadcn/src/utils/updaters/update-dependencies.ts101-109
当使用 npm 检测到 React 19 时,系统会提供一个交互式提示来处理对等依赖冲突。
来源: packages/shadcn/src/utils/updaters/update-dependencies.ts37-61 apps/www/content/docs/react-19.mdx111-120
警告消息引用了全面的 React 19 文档,该文档解释了兼容性情况并为用户提供了指导。
来源: packages/shadcn/src/utils/updaters/update-dependencies.ts10-99
系统根据检测到的包管理器和配置构建包管理器命令。
| 场景 | 命令结构 |
|---|---|
| npm 正常 | ["install", ...dependencies] |
| npm 带标志 | ["install", "--force", ...dependencies] |
| pnpm/bun | ["add", ...dependencies] |
| deno | ["add", ...dependencies.map(dep => "npm:" + dep)] |
| 开发依赖 | 在依赖项前添加 "-D" 标志。 |
来源: packages/shadcn/src/utils/updaters/update-dependencies.ts66-96
依赖管理系统包含针对各种场景的全面测试覆盖。
来源: packages/shadcn/test/utils/updaters/update-dependencies.test.ts15-138 packages/shadcn/test/fixtures/project-npm-react19/package.json1-10 packages/shadcn/test/fixtures/project-deno/deno.json1
测试固定装置包括每个支持的包管理器和 React 版本组合的真实项目配置,确保依赖管理系统在所有支持的环境中都能正常工作。