미숑이의 블로그
블로그 홈소개

© 2025 Ryu Mi Sung. All rights reserved.

목차

import alias 장점?
전과 후를 비교해보면?
기존 import 문
import alias 설정 후
어떻게 설정 할 것인가?
craco 무엇인가?
의존성 설치
폴더 구조
코드 생성
코드 수정
eject?
마무리
참고
ETC

지옥 같던 상대경로 탈출기 (feat. craco)

류미성
2024년 8월 22일

import alias 장점?

  • ../../ 라는 무한 굴레에서 벗어나 절대 경로로 코드를 깔끔하게 관리할 수 있다.
  • 설치가 간단하다.

전과 후를 비교해보면?

기존 import 문

  • 프로젝트를 진행하면 import문이 무한히 생성되고, 같은 ../../ 가 반복되어 가독성이 떨어지던 찰나에
import { useAuth } from '../../hooks';
import { useAuth } from '../../components';
import { ROLE_NAME } from '../../constants';

import alias 설정 후

  • 보기 좋게 코드 정리가 가능해졌다.
import { useAuth } from '@/hooks';
import { useAuth } from '@/components';
import { ROLE_NAME } from '@/constants';

어떻게 설정 할 것인가?

  • craco를 이용하여 손쉽게 react 프로젝트에 import alias를 설정할 수 있다.

craco 무엇인가?

  • Create-React-App Configuration Override의 약어로, 말 그대로 CRA에 config 설정을 덮어쓰기 위한 패키지

의존성 설치

npm i -D @craco/craco

폴더 구조

my-app
  ├── node_modules
+ ├── craco.config.js
+ ├── jsconfig.json
  └── package.json

코드 생성

// craco.config.js
 
const { CracoAliasPlugin } = require('react-app-alias');
 
module.exports = {
  plugins: [
    {
      plugin: CracoAliasPlugin,
      options: {
        source: 'jsconfig',
        baseUrl: '.',
        jsConfigPath: './jsconfig.json',
      },
    },
  ],
};
// jsconfig.json
 
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    }
  },
  "exclude": ["node_modules"]
}

코드 수정

// package.json
 
{
    "scripts": {
        "start": "craco start",
        "build": "craco build",
        "test": "craco test",
        "eject": "craco eject"
    },
}

eject?

  • CRA를 설치하고 package.json 파일에 들어가서 "scripts" 부분을 자세히 보면 맨 마지막에 앱을 eject시킬 수 있는 명령어가 있다.
  • npm run eject 혹은 yarn eject를 실행하면 숨겨져 있던 모든 설정들(All configurations, webpack, Babel 설정 파일 등)과 패키지들이 가지는 의존성을 볼 수 있다.
  • 하지만 주의할 점은, 한번 eject를 수행하게 되면 이전 상태로 되돌아 갈 수 없다.
  • craco는 eject를 하지 않고 CRA를 커스텀마이징 할 수 있다.

마무리

간단한 의존성 설치 과정만 거치면 깔끔하게 코드를 정리 할 수 있고, 이런 코드를 볼 때마다 마음이 편해진다. 사용해 본 경험으로 craco 패키지를 쓰지 않을 이유가 없다. (모든 프로젝트에 적용 중)

참고

  • https://www.npmjs.com/package/@craco/craco
  • https://craco.js.org
  • https://github.com/dilanx/craco
  • https://abangpa1ace.tistory.com/220