From 7640ef7bbc5fea280a8b5227a2455bb840478573 Mon Sep 17 00:00:00 2001 From: shadcn Date: Sun, 14 Jan 2024 15:21:57 +0400 Subject: [PATCH] feat: add support for adding devDependencies in the cli (#2419) * feat(cli): add support for install devDependencies * chore: add changeset --- .changeset/violet-roses-live.md | 5 +++++ apps/www/registry/registry.ts | 1 + apps/www/registry/schema.ts | 1 + packages/cli/src/commands/add.ts | 18 +++++++++++++++++- packages/cli/src/utils/registry/schema.ts | 1 + 5 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 .changeset/violet-roses-live.md diff --git a/.changeset/violet-roses-live.md b/.changeset/violet-roses-live.md new file mode 100644 index 00000000000..514ad09999d --- /dev/null +++ b/.changeset/violet-roses-live.md @@ -0,0 +1,5 @@ +--- +"shadcn-ui": minor +--- + +add support for devDependencies diff --git a/apps/www/registry/registry.ts b/apps/www/registry/registry.ts index 6c2c7ba226f..d3e922eebfc 100644 --- a/apps/www/registry/registry.ts +++ b/apps/www/registry/registry.ts @@ -60,6 +60,7 @@ const ui: Registry = [ files: ["ui/carousel.tsx"], registryDependencies: ["button"], dependencies: ["embla-carousel-react"], + devDependencies: ["embla-carousel"], }, { name: "checkbox", diff --git a/apps/www/registry/schema.ts b/apps/www/registry/schema.ts index 73a86ebe4f6..5101dcc4551 100644 --- a/apps/www/registry/schema.ts +++ b/apps/www/registry/schema.ts @@ -4,6 +4,7 @@ export const registrySchema = z.array( z.object({ name: z.string(), dependencies: z.array(z.string()).optional(), + devDependencies: z.array(z.string()).optional(), registryDependencies: z.array(z.string()).optional(), files: z.array(z.string()), type: z.enum([ diff --git a/packages/cli/src/commands/add.ts b/packages/cli/src/commands/add.ts index 30957296615..0f31c246c42 100644 --- a/packages/cli/src/commands/add.ts +++ b/packages/cli/src/commands/add.ts @@ -180,9 +180,10 @@ export const add = new Command() await fs.writeFile(filePath, content) } + const packageManager = await getPackageManager(cwd) + // Install dependencies. if (item.dependencies?.length) { - const packageManager = await getPackageManager(cwd) await execa( packageManager, [ @@ -194,6 +195,21 @@ export const add = new Command() } ) } + + // Install devDependencies. + if (item.devDependencies?.length) { + await execa( + packageManager, + [ + packageManager === "npm" ? "install" : "add", + "-D", + ...item.devDependencies, + ], + { + cwd, + } + ) + } } spinner.succeed(`Done.`) } catch (error) { diff --git a/packages/cli/src/utils/registry/schema.ts b/packages/cli/src/utils/registry/schema.ts index b275492d85c..2b1806109a1 100644 --- a/packages/cli/src/utils/registry/schema.ts +++ b/packages/cli/src/utils/registry/schema.ts @@ -4,6 +4,7 @@ import * as z from "zod" export const registryItemSchema = z.object({ name: z.string(), dependencies: z.array(z.string()).optional(), + devDependencies: z.array(z.string()).optional(), registryDependencies: z.array(z.string()).optional(), files: z.array(z.string()), type: z.enum(["components:ui", "components:component", "components:example"]),