-
Notifications
You must be signed in to change notification settings - Fork 4.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(shadcn): monorepo support (#6104)
- Loading branch information
Showing
65 changed files
with
6,665 additions
and
88 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
node_modules/ | ||
target/ | ||
.next/ | ||
build/ | ||
dist/ | ||
|
||
/templates/ | ||
/fixtures/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,175 @@ | ||
--- | ||
title: Monorepo | ||
description: Using shadcn/ui components and CLI in a monorepo. | ||
--- | ||
|
||
<Callout> | ||
**Note:** We're releasing monorepo support in the CLI as __experimental__. | ||
Help us improve it by testing it out and sending feedback. If you have any | ||
questions, please [reach out to | ||
us](https://github.com/shadcn-ui/ui/discussions). | ||
</Callout> | ||
|
||
Until now, using shadcn/ui in a monorepo was a bit of a pain. You could add | ||
components using the CLI, but you had to manage where the components | ||
were installed and manually fix import paths. | ||
|
||
With the new monorepo support in the CLI, we've made it a lot easier to use | ||
shadcn/ui in a monorepo. | ||
|
||
The CLI now understands the monorepo structure and will install the components, | ||
dependencies and registry dependencies to the correct paths and handle imports | ||
for you. | ||
|
||
## Getting started | ||
|
||
<Steps> | ||
|
||
### Create a new monorepo project | ||
|
||
To create a new monorepo project, run the `init` command. You will be prompted | ||
to select the type of project you are creating. | ||
|
||
```bash | ||
npx shadcn@canary init | ||
``` | ||
|
||
Select the `Next.js (Monorepo)` option. | ||
|
||
```bash | ||
? Would you like to start a new project? | ||
Next.js | ||
❯ Next.js (Monorepo) | ||
``` | ||
|
||
This will create a new monorepo project with two workspaces: `web` and `ui`, | ||
and [Turborepo](https://turbo.build/repo/docs) as the build system. | ||
|
||
Everything is set up for you, so you can start adding components to your project. | ||
|
||
### Add components to your project | ||
|
||
To add components to your project, run the `add` command **in the path of your app**. | ||
|
||
```bash | ||
cd apps/web | ||
``` | ||
|
||
```bash | ||
npx shadcn@canary add [COMPONENT] | ||
``` | ||
|
||
The CLI will figure out what type of component you are adding and install the | ||
correct files to the correct path. | ||
|
||
For example, if you run `npx shadcn@canary add button`, the CLI will install the button component under `packages/ui` and update the import path for components in `apps/web`. | ||
|
||
If you run `npx shadcn@canary add login-01`, the CLI will install the `button`, `label`, `input` and `card` components under `packages/ui` and the `login-form` component under `apps/web/components`. | ||
|
||
### Importing components | ||
|
||
You can import components from the `@workspace/ui` package as follows: | ||
|
||
```tsx | ||
import { Button } from "@workspace/ui/components/button" | ||
``` | ||
|
||
You can also import hooks and utilities from the `@workspace/ui` package. | ||
|
||
```tsx | ||
import { useTheme } from "@workspace/ui/hooks/use-theme" | ||
import { cn } from "@workspace/ui/lib/utils" | ||
``` | ||
|
||
</Steps> | ||
|
||
## File Structure | ||
|
||
When you create a new monorepo project, the CLI will create the following file structure: | ||
|
||
```txt | ||
apps | ||
└── web # Your app goes here. | ||
├── app | ||
│ └── page.tsx | ||
├── components | ||
│ └── login-form.tsx | ||
├── components.json | ||
└── package.json | ||
packages | ||
└── ui # Your components and dependencies are installed here. | ||
├── src | ||
│ ├── components | ||
│ │ └── button.tsx | ||
│ ├── hooks | ||
│ ├── lib | ||
│ │ └── utils.ts | ||
│ └── styles | ||
│ └── globals.css | ||
├── components.json | ||
└── package.json | ||
package.json | ||
turbo.json | ||
``` | ||
|
||
## Requirements | ||
|
||
1. Every workspace must have a `components.json` file. A `package.json` file tells npm how to install the dependencies. A `components.json` file tells the CLI how and where to install components. | ||
|
||
2. The `components.json` file must properly define aliases for the workspace. This tells the CLI how to import components, hooks, utilities, etc. | ||
|
||
```json title="apps/web/components.json" | ||
{ | ||
"$schema": "https://ui.shadcn.com/schema.json", | ||
"style": "new-york", | ||
"rsc": true, | ||
"tsx": true, | ||
"tailwind": { | ||
"config": "../../packages/ui/tailwind.config.ts", | ||
"css": "../../packages/ui/src/styles/globals.css", | ||
"baseColor": "zinc", | ||
"cssVariables": true | ||
}, | ||
"iconLibrary": "lucide", | ||
"aliases": { | ||
"components": "@/components", | ||
"hooks": "@/hooks", | ||
"lib": "@/lib", | ||
"utils": "@workspace/ui/lib/utils", | ||
"ui": "@workspace/ui/components" | ||
} | ||
} | ||
``` | ||
|
||
```json title="packages/ui/components.json" | ||
{ | ||
"$schema": "https://ui.shadcn.com/schema.json", | ||
"style": "new-york", | ||
"rsc": true, | ||
"tsx": true, | ||
"tailwind": { | ||
"config": "tailwind.config.ts", | ||
"css": "src/styles/globals.css", | ||
"baseColor": "zinc", | ||
"cssVariables": true | ||
}, | ||
"iconLibrary": "lucide", | ||
"aliases": { | ||
"components": "@workspace/ui/components", | ||
"utils": "@workspace/ui/lib/utils", | ||
"hooks": "@workspace/ui/hooks", | ||
"lib": "@workspace/ui/lib", | ||
"ui": "@workspace/ui/components" | ||
} | ||
} | ||
``` | ||
|
||
3. Ensure you have the same `style`, `iconLibrary` and `baseColor` in both `components.json` files. | ||
|
||
By following these requirements, the CLI will be able to install ui components, blocks, libs and hooks to the correct paths and handle imports for you. | ||
|
||
## Help us improve monorepo support | ||
|
||
We're releasing monorepo support in the CLI as **experimental**. Help us improve it by testing it out and sending feedback. | ||
|
||
If you have any questions, please reach out to us on [GitHub Discussions](https://github.com/shadcn-ui/ui/discussions). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.