리액트 절대경로 @ 커스텀 공부하기
프로젝트를 하고 팀원들과 같이 작업을 하며
점점 코드 양도 많아지고 경로가 깊어지는 현상으로, 경로 앞에@를 설정하는 걸 우리 팀에서 도입하기로 했다
간단히 공부 해보기 위한 기록
절대경로 @ 설정하는 방법 (Vite 기준)
❶ vite.config.ts 또는 vite.config.js 열기
vite.config.ts 파일을 열기
// vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path' // ⭐️ 이거 꼭 추가해야 함!
export default defineConfig({
plugins: [react()],
resolve: {
alias: {
'@': path.resolve(__dirname, 'src'), // ⭐️ 여기서 @를 src로 매핑!
},
},
})
만약 .js 파일이면 path.resolve(...) 그대로 쓰면 된다
그냥 무작정 따라 적기보다 뭐가 뭔지 알고 넘어가기.
우선 config 파일이란 ?
vite.config.ts 파일은 Vite 프로젝트의 전체 설정을 담당하는 핵심 파일
이 파일을 잘 이해하면, 어떤 설정이든 자유롭게 커스터마이징할 수 있어서 정말 중요하다.
vite.config.ts 파일의 역할
1. 플러그인 설정
Vite는 경량이고 빠른 대신, 필요한 기능은 플러그인으로 추가함. 예를 들어,
import react from '@vitejs/plugin-react'
plugins: [react()]
→ Vite에서 React 문법(JSX) 을 사용하려면 꼭 이 플러그인을 추가해야 해.
2. 경로(alias) 설정
예: @/components/Button 이렇게 짧게 쓰고 싶을 때:
import path from 'path'
resolve: {
alias: {
'@': path.resolve(__dirname, 'src')
}
}
→ @를 src 폴더로 인식하게 설정.
3. 서버 설정 (개발 서버)
개발 중 로컬 서버 포트나 프록시 등 설정 가능:
server: {
port: 3000,
open: true, // 자동으로 브라우저 열기
}
4. 빌드 설정
최종 배포 시의 파일 구조나 옵션들 지정:
build: {
outDir: 'dist', // 빌드 결과물 폴더
}
5. 환경 변수 연결
import.meta.env로 .env 파일을 사용할 수 있게 함.
필요할 때마다 설정 항목을 조금씩 추가하면 된다.
그렇다면, 절대 경로 @ 설정하는 방법 풀이
@를 써서 폴더 안 깊이 들어가도 쉽게 import 하고 싶다는 것
예시 : 일반 방식
import MyComponent from '../../../components/MyComponent'
이게 너무 복잡하고 짜증나니까…
예시 : 절대경로 방식
import MyComponent from '@/components/MyComponent'
이렇게 @로 src부터 바로 접근하고 싶은 거지!
이걸 가능하게 해주는 게 바로 vite.config.ts 파일
import path from 'path'
- path는 Node.js에 기본으로 들어있는 "경로 도와주는 도구야".
alias: {
'@': path.resolve(__dirname, 'src'),
}
- "@"라는 별명(alias) 을 만들어서
- "src" 폴더를 가리키게 설정한 거야!
👉 그래서 @/components = src/components가 되는 거야!!
전체 흐름을 그림으로 표현하면:
import Something from '@/components/Button'
// 실제로는 Vite가 이렇게 봐:
// import Something from 'src/components/Button'
즉, @는 그냥 src의 애칭이라고 생각하면 돼!
(별명, shortcut, 단축키 같은 느낌!)
@처럼 별칭(alias) 은 원하는 폴더마다 설정해줘야 한다 !
예를 들어서…
프로젝트 구조가 이렇게 돼 있다고 해보자:
src/
components/
pages/
hooks/
utils/
shared/
types/
자주 쓰는 폴더들을 별칭으로 지정하려면:
// vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'
export default defineConfig({
plugins: [react()],
resolve: {
alias: {
'@': path.resolve(__dirname, 'src'),
'@components': path.resolve(__dirname, 'src/components'),
'@pages': path.resolve(__dirname, 'src/pages'),
'@hooks': path.resolve(__dirname, 'src/hooks'),
'@utils': path.resolve(__dirname, 'src/utils'),
'@shared': path.resolve(__dirname, 'shared'),
'@types': path.resolve(__dirname, 'types'),
},
},
})
import Button from '@components/Button'
import useFetch from '@hooks/useFetch'
import { doSomething } from '@utils/helpers'
이런 식으로 깔끔하고 명확하게 import 할 수 있음
참고: 꼭 다 설정해야 하는 건 아니야
- @ 하나만 해두고 @/components, @/utils 이렇게 쓰는 사람들도 많아!
- 하지만 자주 쓰는 폴더가 많고 @/pages/SignUp 이런 게 너무 길다 싶으면
별도로 @pages, @hooks 따로 설정하면 더 깔끔해지지!
타입스크립트 쓴다면 tsconfig.json도 잊지 말고 설정
"paths": {
"@/*": ["src/*"],
"@components/*": ["src/components/*"],
"@pages/*": ["src/pages/*"],
"@hooks/*": ["src/hooks/*"],
"@utils/*": ["src/utils/*"],
"@shared/*": ["shared/*"],
"@types/*": ["types/*"]
}
✨ 자주 하는 실수 팁
- 설정하고 나면 꼭 VSCode 껐다 켜기!
- tsconfig.json에 paths도 맞게 설정해야 VSCode에서 빨간줄 안 떠
필요하면 그림이나 예제 코드 구조도 만들어줄 수 있어!
더 이해 안 가는 부분 있어? 내가 끝까지 같이 설명해줄게! 😊
❷ tsconfig.json 도 수정해줘 (타입스크립트일 때만!)
// tsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
}
}
자바스크립트만 쓴다면 이건 안 해도 돼.
❸ VSCode 재시작
- 저장하고 VSCode 껐다 켜기
- 그래야 빨간 줄 안 뜨고 @로 잘 인식돼!
❹이제 이렇게 사용 가능 💡
// 예시
import MyComponent from '@/components/MyComponent'
이제 ../../../ 이런 거 안 써도 됌! ❤️