Eu queria descobrir como funciona a CLI shadcn-ui. Neste artigo, discuto o código usado para construir a CLI shadcn-ui/ui.
Na parte 2.11, vimos a função runInit e como shadcn-ui/ui garante que os diretórios fornecidos em resolvePaths na configuração existam.
As seguintes operações são realizadas na função runInit:
1, 2, 3, 4 acima são abordados nas partes 2.12, 2.13 e 2.14, vamos descobrir como a operação de “Instalar dependências” é feita.
O trecho de código abaixo foi escolhido em 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 é um girador de terminal elegante e é usado para mostrar a mensagem “Instalando dependências…” quando você executa o comando npx shadcn init.
getPackageManager são pacotes importados/cli/src/utils/get-package-manager.ts
import { detect } from "@antfu/ni" export async function getPackageManager( targetDir: string ): Promise { 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" }
Você já usou o npm em um projeto pnpm? Eu fiz isso e muitas vezes ele falha ao instalar o pacote porque você está usando o npm em um projeto pnpm.
@antfu/ni permite que você use o gerenciador de pacotes correto e detect é uma função que fornece o packageManager usado em um determinado projeto baseado em cwd.
Não consigo encontrar nada mencionado sobre o método de detecção no leia-me @antfu/ni do Github. Como você saberia que tal método existe, a menos que você o leia em alguma base de código de código aberto?
Execa executa comandos em seu script, aplicativo ou biblioteca. Ao contrário dos shells, ele é otimizado para uso programático. Construído sobre o módulo principal child_process. Isto é construído pela lenda, Sindre Sorhus
shadcn-ui/ui CLI usa execa para instalar as dependências necessárias como parte do comando npx shadcn-ui init.
shadcn-ui CLI usa execa, construído pela lenda Sindre Sorhu. Execa é usado para instalar as dependências necessárias em um arquivo de script. Todos nós estamos familiarizados com a execução de comandos de instalação, mas se você quiser instalar alguns pacotes em um script programaticamente, execa pode ser usado.
shadcn-ui CLI detecta o gerenciador de pacotes usado em seu projeto usando o método “detect” de @antfu/ni.
Este artigo marca minha busca para estudar e aprender o que acontece nos bastidores quando você executa o comando npx shadcn-ui init como concluído.
Estou estudando o comando add.
Quer aprender como construir shadcn-ui/ui do zero? Confira construir do zero
Site: https://ramunarasinga.com/
Linkedin: https://www.linkedin.com/in/ramu-narasinga-189361128/
Github: https://github.com/Ramu-Narasinga
E-mail: [email protected]
Construa shadcn-ui/ui do zero
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3