


Analyse de la base de code shadcn-ui/ui : comment fonctionne la CLI shadcn-ui ? — Partie 5
Je voulais découvrir comment fonctionne la CLI shadcn-ui. Dans cet article, je discute du code utilisé pour créer la CLI shadcn-ui/ui.
Dans la partie 2.11, nous avons examiné la fonction runInit et comment shadcn-ui/ui garantit que les répertoires fournis dans les chemins résolus dans la configuration existent.
Les opérations suivantes sont effectuées dans la fonction runInit :
- Assurez-vous que tous les répertoires de chemins résolus existent.
- Écrivez la configuration du vent arrière.
- Écrivez le fichier CSS.
- Écrivez le fichier cn.
- Installer les dépendances.
1, 2, 3, 4 de ce qui précède sont traités dans les parties 2.12, 2.13 et 2.14, découvrons comment se déroule l'opération « Installer les dépendances ».
Installer les dépendances
L'extrait de code ci-dessous est extrait de 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 est un élégant spinner de terminal et est utilisé pour afficher le message « Installation des dépendances… » lorsque vous exécutez la commande npx shadcn init.
getPackageManager
getPackageManager est importé 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" }
Avez-vous déjà utilisé npm dans un projet pnpm ? Je l'ai fait et souvent, l'installation du package ne parvient pas car vous utilisez npm dans un projet pnpm.
@antfu/ni vous permet d'utiliser le bon gestionnaire de packages et de détecter est une fonction qui donne le packageManager utilisé dans un projet donné basé sur cwd.
Je ne trouve rien de mentionné sur la méthode de détection dans le fichier readme de @antfu/ni Github. Comment sauriez-vous qu’une telle méthode existe à moins de la lire dans une base de code open source ?
exécutable
Execa exécute des commandes dans votre script, application ou bibliothèque. Contrairement aux shells, il est optimisé pour une utilisation programmatique. Construit sur le module principal child_process. Ceci est construit par la légende Sindre Sorhus
shadcn-ui/ui CLI utilise execa pour installer les dépendances nécessaires dans le cadre de la commande npx shadcn-ui init.
Conclusion
shadcn-ui CLI utilise execa, construit par la légende Sindre Sorhu. Execa est utilisé pour installer les dépendances nécessaires dans un fichier script. Nous sommes tous familiers avec l'exécution de commandes d'installation, mais si vous souhaitez installer certains packages dans un script par programme, execa peut être utilisé.
shadcn-ui CLI détecte le gestionnaire de packages utilisé dans votre projet à l'aide de la méthode « détecter » de @antfu/ni.
Cet article marque ma quête pour étudier et apprendre ce qui se passe sous le capot lorsque vous exécutez la commande npx shadcn-ui init comme terminée.
Je passe à l'étude de la commande add.
Vous voulez apprendre à créer shadcn-ui/ui à partir de zéro ? Découvrez construire à partir de zéro
Sur moi:
Site Internet : https://ramunarasinga.com/
Linkedin : https://www.linkedin.com/in/ramu-narasinga-189361128/
Github : https://github.com/Ramu-Narasinga
Email : ramu.narasinga@gmail.com
Construisez shadcn-ui/ui à partir de zéro
Références :
- https://github.com/shadcn-ui/ui/blob/main/packages/cli/src/commands/init.ts#L382
- https://www.npmjs.com/package/ora
- https://github.com/shadcn-ui/ui/blob/main/packages/cli/src/utils/get-package-manager.ts#L3
- https://www.npmjs.com/package/@antfu/ni
- https://github.com/antfu-collective/ni#readme
- https://github.com/search?q=import+%7B+detect+%7D+from+%22%40antfu%2Fni%22&type=code
- https://www.npmjs.com/package/execa
- https://github.com/sindresorhus
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Remplacer les caractères de chaîne en javascript

jQuery Vérifiez si la date est valide

jQuery obtient un rembourrage / marge d'élément

10 vaut la peine de vérifier les plugins jQuery

Http débogage avec le nœud et le http-console

Tutoriel de configuration de l'API de recherche Google personnalisé

jQuery Ajouter une barre de défilement à div
