import alias

Songss·2025년 2월 10일

개발스킬

목록 보기
6/9

조금만 일찍 알았다면 좋았을 것을... ㅎ
import alias를 알고나서 전체 수정했다가 오류발생해서
50개가 넘는 파일을 수동으로 다 고쳤다 Haaaa
내가 곧 alias인거 같은데 ㅋㅋㅋ

뭐 그래도 적어놓고 나중에 참고해서 코딩해보자.

📌 Import Alias란?

import aliasES6 모듈 시스템에서 특정 모듈이나 변수에 별칭(Alias)을 설정하여 더 편리하게 사용할 수 있도록 하는 기능이야.

즉, 파일 경로가 길거나, 모듈 이름이 너무 길 때 단축하여 사용할 수 있도록 하는 기법

📌 Import Alias의 핵심 개념

방법설명
as 키워드 사용동일한 이름의 여러 모듈을 구별할 때
tsconfig.json의 paths 설정긴 경로를 짧게 관리할 때
default export에서 Alias 설정컴포넌트명을 변경하여 가져올 때

그렇지만 이러한 요구사항을 쉽게 관리해주는 라이브러리도 존재한다고한다.

CRA기반으로 만들어진 React는 CRACO 라는 라이브러리로 관리할 수 있다고한다.

⭕️CRACO(Create React App Configuration Override)Create React App (CRA) 프로젝트에서 Webpack 및 Babel 설정을 커스터마이징할 수 있도록 도와주는 라이브러리

그렇지마 나는 Vite엔진 기반으로 만들어진 React이므로 vite.config.ts에서 alias를 만들어보려고한다.

비교적 간단한 것 같다.

1️⃣ vite.config.js에서 alias 설정

/*vite.config.ts*/
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import path from 'path';

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

이렇게 하면 @components, @utils 등의 별칭(alias)을 설정할 수 있음!

2️⃣ 설정한 Import Alias를 사용하는 방법

이제 import할 때, 설정한 @components 및 @utils를 사용할 수 있어.

✔ 예제: @components Alias 사용하기

// 기존 방식 (❌ 너무 길다)
import Button from "../../components/common/Button";

// Alias 사용 (✅ 짧고 가독성 높음)
import Button from "@components/common/Button";

이제 @components/를 사용하면 경로가 짧아지고 유지보수성이 좋아짐!

3️⃣ TypeScript 프로젝트에서 tsconfig.json도 함께 설정하기

만약 TypeScript를 사용하고 있다면, tsconfig.json에서도 같은 paths 설정을 추가해야 해.

✔ tsconfig.json 수정

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

이렇게 하면 TypeScript에서도 Import Alias를 인식할 수 있음!

📌 결론

📌 Vite에서는 vite.config.js에서 resolve.alias를 설정하여 Import Alias를 사용할 수 있다.

📌 Webpack에서 CRACO를 사용했던 것처럼, Vite에서는 path.resolve(__dirname, "src/...")를 활용하면 된다.

📌 TypeScript를 함께 사용한다면 tsconfig.json의 paths도 함께 설정해야 한다.

0개의 댓글