首页 web前端 js教程 shadcn-ui/ui 代码库分析:shadcn-ui CLI 是如何工作的? — 第 5 部分

shadcn-ui/ui 代码库分析:shadcn-ui CLI 是如何工作的? — 第 5 部分

Jul 19, 2024 am 12:48 AM

我想了解 shadcn-ui CLI 是如何工作的。在本文中,我将讨论用于构建 shadcn-ui/ui CLI 的代码。

在第 2.11 部分中,我们研究了 runInit 函数以及 shadcn-ui/ui 如何确保配置中的 returnedPaths 中提供的目录存在。

runInit 函数中执行以下操作:

shadcn-ui/ui codebase analysis: How does shadcn-ui CLI work? — Part 5

  1. 确保所有已解析的路径目录都存在。
  2. 编写 tailwind 配置。
  3. 编写CSS文件。
  4. 写入 cn 文件。
  5. 安装依赖项。

上面的1,2,3,4在2.12,2.13,2.14部分都有介绍,我们来看看“安装依赖”操作是如何完成的。

安装依赖项

以下代码片段摘自 cli/src/commands/init.ts

// Install dependencies.
const dependenciesSpinner = ora(\`Installing dependencies...\`)?.start()
const packageManager = await getPackageManager(cwd)

// TODO: add support for other icon libraries.
const deps = \[
  ...PROJECT\_DEPENDENCIES,
  config.style === "new-york" ? "@radix-ui/react-icons" : "lucide-react",
\]

await execa(
  packageManager,
  \[packageManager === "npm" ? "install" : "add", ...deps\],
  {
    cwd,
  }
)
dependenciesSpinner?.succeed()
登录后复制

ora 是一个优雅的终端微调器,用于在运行 npx shadcn init 命令时显示消息“正在安装依赖项...”。

获取包管理器

getPackageManager 导入packages/cli/src/utils/get-package-manager.ts

import { detect } from "@antfu/ni"

export async function getPackageManager(
  targetDir: string
): Promise<"yarn" | "pnpm" | "bun" | "npm"> {
  const packageManager = await detect({ programmatic: true, cwd: targetDir })

  if (packageManager === "yarn@berry") return "yarn"
  if (packageManager === "pnpm@6") return "pnpm"
  if (packageManager === "bun") return "bun"

  return packageManager ?? "npm"
}
登录后复制

你曾经在 pnpm 项目中使用过 npm 吗?我经常无法安装软件包,因为您在 pnpm 项目中使用 npm。

@antfu/ni 让您使用正确的包管理器,并且 detector 是一个函数,它基于 cwd 给出给定项目中使用的 packageManager。

我在 @antfu/ni Github 自述文件中找不到任何有关检测方法的内容。除非您在某些开源代码库中阅读过它,否则您怎么知道存在这样的方法?

埃克卡

Execa 在您的脚本、应用程序或库中运行命令。与 shell 不同,它针对编程使用进行了优化。构建在 child_process 核心模块之上。这是由传奇人物 Sindre Sorhus 建造的

shadcn-ui/ui CLI 使用 execa 安装必要的依赖项作为 npx shadcn-ui init 命令的一部分。

结论

shadcn-ui CLI 使用由传奇人物 Sindre Sorhu 构建的 execa。 Execa 用于在脚本文件中安装必要的依赖项。我们都熟悉执行安装命令,但如果您想以编程方式在脚本中安装某些包,可以使用 execa。

shadcn-ui CLI 使用@antfu/ni 中的“检测”方法检测项目中使用的包管理器。

本文标志着我对运行 npx shadcn-ui init 命令时幕后发生的情况的研究和了解已完成。

我正在继续研究 add 命令。

想学习如何从头开始构建 shadcn-ui/ui 吗?查看 从头开始构建

关于我:

网站:https://ramunarasinga.com/

Linkedin:https://www.linkedin.com/in/ramu-narasinga-189361128/

Github:https://github.com/Ramu-Narasinga

电子邮件:ramu.narasinga@gmail.com

从头开始构建 shadcn-ui/ui

参考:

  1. https://github.com/shadcn-ui/ui/blob/main/packages/cli/src/commands/init.ts#L382
  2. https://www.npmjs.com/package/ora
  3. https://github.com/shadcn-ui/ui/blob/main/packages/cli/src/utils/get-package-manager.ts#L3
  4. https://www.npmjs.com/package/@antfu/ni
  5. https://github.com/antfu-collective/ni#readme
  6. https://github.com/search?q=import+%7B+detect+%7D+from+%22%40antfu%2Fni%22&type=code
  7. https://www.npmjs.com/package/execa
  8. https://github.com/sindresorhus

以上是shadcn-ui/ui 代码库分析:shadcn-ui CLI 是如何工作的? — 第 5 部分的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在JavaScript中替换字符串字符 在JavaScript中替换字符串字符 Mar 11, 2025 am 12:07 AM

在JavaScript中替换字符串字符

jQuery检查日期是否有效 jQuery检查日期是否有效 Mar 01, 2025 am 08:51 AM

jQuery检查日期是否有效

jQuery获取元素填充/保证金 jQuery获取元素填充/保证金 Mar 01, 2025 am 08:53 AM

jQuery获取元素填充/保证金

10个jQuery手风琴选项卡 10个jQuery手风琴选项卡 Mar 01, 2025 am 01:34 AM

10个jQuery手风琴选项卡

10值得检查jQuery插件 10值得检查jQuery插件 Mar 01, 2025 am 01:29 AM

10值得检查jQuery插件

HTTP与节点和HTTP-Console调试 HTTP与节点和HTTP-Console调试 Mar 01, 2025 am 01:37 AM

HTTP与节点和HTTP-Console调试

自定义Google搜索API设置教程 自定义Google搜索API设置教程 Mar 04, 2025 am 01:06 AM

自定义Google搜索API设置教程

jQuery添加卷轴到Div jQuery添加卷轴到Div Mar 01, 2025 am 01:30 AM

jQuery添加卷轴到Div

See all articles