Skip to content

fix: respect components.json alias for install path#440

Open
gianpieropuleo wants to merge 1 commit into
vercel:mainfrom
gianpieropuleo:fix/respect-components-json-alias
Open

fix: respect components.json alias for install path#440
gianpieropuleo wants to merge 1 commit into
vercel:mainfrom
gianpieropuleo:fix/respect-components-json-alias

Conversation

@gianpieropuleo

@gianpieropuleo gianpieropuleo commented Jun 13, 2026

Copy link
Copy Markdown

Problem

Installing ai-elements ignores the components alias in components.json, always writing files to <project-root>/components/ai-elements/ regardless of how the project is configured.

Re-addresses #44, which was closed after PR #46 removed the target field, but commit 1c23c11 ("Add targets") reintroduced it shortly after, bringing the bug back.

Root cause

shadcn's resolveAliasTarget only activates when a target starts with @aliasKey/. A plain components/ai-elements/... target bypasses alias resolution entirely and is treated as a literal path relative to the project root.

Fix

Prefix all target values with @components/ so shadcn resolves the destination through the components alias in components.json:

  • Default config ("components": "@/components") -> components/ai-elements/
  • Custom config ("components": "@/lib/components") -> lib/components/ai-elements/
  • No components.json -> shadcn runs init first, then the default alias applies ✓

Why not just remove target?

PR #46 tried this. The problem: without target, shadcn calls resolveNestedFilePath(path, targetDir) which looks for the last segment of the resolved components dir (e.g. "components") inside the file's path string (registry/default/ai-elements/conversation.tsx). No match is found, so it falls back to just the filename, and files would land at lib/components/conversation.tsx instead of lib/components/ai-elements/conversation.tsx.

shadcn's resolveAliasTarget only activates when the target starts with
`@aliasKey/`. Plain `components/ai-elements/...` bypasses alias resolution
and writes to `<project-root>/components/ai-elements/` regardless of how
`components.json` is configured.

Prefixing targets with `@components/` lets shadcn resolve the destination
through the `components` alias, so projects that remap it (e.g. to
`@/lib/components`) get files installed in the right place.
@vercel

vercel Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

@gianpieropuleo is attempting to deploy a commit to the Vercel Team on Vercel.

A member of the Team first needs to authorize it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant