shadcn/ui No import alias found 오류 해결: tsconfig 설정

2026.05.09·수정 2026.09.14·약 10분·작성: 해비·블로그 소개

No import alias found 오류 빠른 해결

No import alias found in your tsconfig.json file 오류는 shadcn/ui가 사용할 별칭과 프로젝트가 실제로 해석하는 별칭이 일치하지 않을 때 발생합니다. src 폴더를 쓴다면 @/* → ./src/*를 기준으로 tsconfig.json, components.json, Vite의 resolve.alias를 맞춘 뒤 작은 컴포넌트 하나를 다시 추가해 검증합니다.

1. 오류 원인과 빠른 진단

shadcn/ui 설치 오류 해결 원인 진단 흐름

명령 또는 진단 메시지 — 자신의 실행 환경에 맞는 구간을 선택하세요.

No import alias found in your tsconfig.json file.
Visit https://ui.shadcn.com/docs/installation to learn how to set an import alias.

이 메시지는 Tailwind CSS가 동작하지 않는 오류와 다릅니다. shadcn/ui CLI는 components.json을 보고 파일을 생성하지만, TypeScript와 번들러는 tsconfig.json, jsconfig.json, vite.config.ts를 기준으로 import 경로를 해석합니다. 세 설정이 서로 다른 폴더를 가리키면 파일은 만들어져도 @/components/ui/button을 찾지 못합니다.

증상 먼저 확인할 곳 대표 원인
init 단계에서 alias 오류 tsconfig.json 또는 jsconfig.json paths가 없거나 CLI 실행 위치가 다름
컴포넌트 생성 후 import 오류 components.json과 실제 폴더 @가 루트와 src 중 다른 곳을 가리킴
에디터는 되지만 Vite 실행 실패 vite.config.ts TypeScript paths만 있고 Vite alias가 없음
모노레포에서만 실패 각 workspace의 설정 파일 루트가 아닌 앱 패키지에서 alias를 찾지 못함

2. components.json과 실제 폴더를 맞춥니다

components.jsonaliases는 shadcn/ui CLI가 생성 파일을 어디에 두고 어떤 import를 만들지 결정합니다. src/components/uisrc/lib/utils.ts를 쓰는 프로젝트라면 다음처럼 맞춥니다.

부분 예제 — 앞뒤 설명에 해당하는 코드만 적용하세요. 다른 예제와 합친 전체 프로젝트가 아닙니다.

{
  "$schema": "https://ui.shadcn.com/schema.json",
  "aliases": {
    "components": "@/components",
    "ui": "@/components/ui",
    "lib": "@/lib",
    "hooks": "@/hooks",
    "utils": "@/lib/utils"
  }
}

중요한 점은 components.json만 고쳐서는 해결되지 않는다는 것입니다. 이 파일은 CLI의 생성 기준이고, @/*를 실제 경로로 바꾸는 일은 TypeScript와 번들러 설정이 담당합니다. src 폴더가 없다면 @/* → ./*를 사용하고, 있다면 @/* → ./src/*를 사용합니다.

3. Next.js에서 tsconfig paths를 맞춥니다

Next.js 프로젝트가 src 폴더를 사용한다면 루트 tsconfig.json에 다음 alias를 둡니다. 기존 compilerOptions를 지우지 말고 baseUrlpaths만 합칩니다.

부분 예제 — 앞뒤 설명에 해당하는 코드만 적용하세요. 다른 예제와 합친 전체 프로젝트가 아닙니다.

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    }
  }
}

src 없이 루트에 app, components, lib를 두었다면 배열 값을 ./*로 바꿉니다. 설정 후 @/components/ui/button이 실제로 src/components/ui/button.tsx 또는 components/ui/button.tsx에 도달하는지 폴더 구조를 직접 대조합니다.

4. Vite에서는 TypeScript와 번들러를 함께 설정합니다

shadcn/ui 설치 오류 해결 해결 단계 체크리스트

Vite의 React·TypeScript 템플릿은 설정이 tsconfig.jsontsconfig.app.json으로 나뉠 수 있습니다. shadcn/ui 공식 Vite 가이드는 두 파일에 같은 @/* → ./src/*를 두고, vite.config.ts에도 실제 alias를 등록하도록 안내합니다.

부분 예제 — 앞뒤 설명에 해당하는 코드만 적용하세요. 다른 예제와 합친 전체 프로젝트가 아닙니다.

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    }
  }
}

부분 예제 — 앞뒤 설명에 해당하는 코드만 적용하세요. 다른 예제와 합친 전체 프로젝트가 아닙니다.

import path from "node:path";
import react from "@vitejs/plugin-react";
import { defineConfig } from "vite";

export default defineConfig({
  plugins: [react()],
  resolve: {
    alias: {
      "@": path.resolve(__dirname, "./src"),
    },
  },
});

path 타입 오류가 나면 pnpm add -D @types/node로 Node 타입을 추가합니다. 이미 다른 alias 방식이나 플러그인을 사용 중이라면 새 방식을 겹쳐 넣지 말고 기존 설정에서 @의 대상만 확인합니다.

5. 모노레포와 package imports 예외

모노레포에서는 루트가 아니라 실제로 shadcn CLI를 실행하는 앱 workspace의 components.json과 TypeScript 설정을 확인합니다. 예를 들어 apps/web에 설치한다면 해당 디렉터리에서 실행하거나 -c apps/web를 지정합니다.

명령 또는 진단 메시지 — 자신의 실행 환경에 맞는 구간을 선택하세요.

pnpm dlx shadcn@latest add button -c apps/web

최신 shadcn CLI는 TypeScript paths 대신 package.json#imports#components/* 같은 별칭도 지원합니다. 다만 두 방식을 동시에 섞으면 진단이 어려워집니다. 기존 프로젝트가 @/*를 사용한다면 먼저 그 설정을 일관되게 맞추고, 마이그레이션이 필요할 때만 package imports를 검토합니다.

6. 수정 후 검증 순서

  1. components.jsonuiutils가 실제 폴더를 가리키는지 확인합니다.
  2. tsconfig.json 또는 jsconfig.json@/* 대상이 루트인지 src인지 확인합니다.
  3. Vite라면 tsconfig.app.jsonvite.config.ts도 같은 기준으로 맞춥니다.
  4. 모노레포라면 CLI 실행 위치와 -c 옵션을 확인합니다.
  5. 작은 컴포넌트 하나를 추가한 뒤 타입 검사와 개발 서버를 실행합니다.

명령 또는 진단 메시지 — 자신의 실행 환경에 맞는 구간을 선택하세요.

pnpm dlx shadcn@latest add button
# Next.js 등 단일 tsconfig 프로젝트
pnpm exec tsc --noEmit
# Vite처럼 tsconfig references로 앱 설정을 나눈 프로젝트는 대신 실행
pnpm exec tsc -b
pnpm run dev

import 경로를 임시 상대 경로로 바꿔 오류를 숨기면 다음 컴포넌트 생성 때 같은 문제가 반복됩니다. CLI가 만든 @/components/ui/button import, 에디터 자동완성, TypeScript 검사, 실제 개발 서버가 모두 통과해야 해결된 것입니다.

공식 기준은 shadcn/ui components.json, shadcn/ui Vite 설치, shadcn/ui 모노레포 문서에서 확인할 수 있습니다. 관련 개념이 헷갈리면 Radix UI와 shadcn/ui 차이도 함께 확인합니다.


연결 학습: alias 오류를 재현하고 분리하기

목표·선행 지식: TypeScript 모듈 경로와 Vite 번들 경로를 구분합니다.

components.json의 aliases는 컴포넌트를 어느 경로에 만들고 import할지 정하는 설정입니다. TypeScript의 paths와 실제 번들러 resolve.alias도 같은 위치를 가리켜야 합니다. tsconfig.app.json을 쓰는 프로젝트라면 앱에 적용되는 파일을 고쳐야 합니다.

직접 확인할 과제

@/lib/utils import 하나를 만든 뒤 타입 검사와 개발 서버를 각각 실행하세요. 한쪽만 성공하면 어느 설정이 빠졌는지 설명할 수 있어야 합니다. 네트워크 레지스트리 실패는 alias 수정만으로 해결되지 않습니다.

공통 실습 ZIP · 다음 학습 · 라이브러리 선택 가이드

공통 ZIP은 버전을 고정한 학습 예제입니다. UI 파일은 Radix·Sonner·Embla 기반 축약 구현이며 shadcn CLI 생성물과 동일하지 않습니다. 적용 범위와 실행 방법은 ZIP의 README를 확인하세요.

이 글이 도움이 되었나요?

조회 중

Tailwind CSS 학습 순서

필수 15개 · 전체 22개

읽음 기록 관리

전체 과정 목차 (22개)
  1. 필수 길잡이 · Tailwind CSS 실전 로드맵: 기본·반응형·상태·동적 클래스 학습 순서
  2. 필수 학습 · Tailwind CSS 기본 클래스 사용법: text font bg spacing 익히기
  3. 필수 학습 · Tailwind border flex 사용법: 레이아웃 기본 클래스 기준
  4. 필수 학습 · Tailwind CSS Preflight 기준: 기본 스타일 초기화가 생기는 이유
  5. 필수 학습 · Tailwind CSS Grid 실무 레이아웃 정리: 카드 목록부터 대시보드까지
  6. 필수 학습 · Tailwind CSS 반응형 클래스 사용법: sm md lg 기준 잡기
  7. 필수 학습 · Tailwind CSS 상태 variant 사용법: hover focus aria data 기준 잡기
  8. 필수 학습 · Tailwind CSS group peer has 차이: 상태 기준으로 고르는 방법
  9. 필수 학습 · Tailwind CSS dark 사용법: 다크 모드 구현 기준 잡기
  10. 필수 학습 · Tailwind CSS arbitrary value 차이: 대괄호 문법 사용 기준 잡기
  11. 선택 참고 · Tailwind CSS 임의 값 공백 처리: 대괄호 문법이 깨질 때 해결하기
  12. 필수 학습 · Tailwind CSS @theme 사용법: 변수와 디자인 토큰 구분하기
  13. 필수 학습 · Tailwind Container Query 사용법: 부모 너비 기준 반응형 처리
  14. 필수 학습 · React Tailwind className 정리: 조건부·variant·가독성 기준
  15. 필수 학습 · Tailwind CSS 동적 클래스 해결: 감지 원리와 @source 사용법
  16. 필수 학습 · Tailwind CSS @apply 사용 기준: @utility와 custom variant 구분하기
  17. 선택 참고 · Tailwind CSS transition, animation, motion-reduce 사용 기준 정리
  18. 선택 참고 · Tailwind CSS v4.1 유틸리티 정리: text-shadow와 mask 사용하기
  19. 선택 참고 · Radix UI와 shadcn/ui 차이: 컴포넌트를 고를 때 헷갈리는 기준 정리
  20. 선택 참고 · shadcn/ui No import alias found 오류 해결: tsconfig 설정 현재 글
  21. 선택 참고 · Tailwind CSS flex 레이아웃 깨질 때 확인할 것
  22. 선택 참고 · Tailwind CSS 클래스 적용 안 됨 해결 순서

새 글 받아보기

RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.

RSS 피드 구독하기

댓글 남기기