- Vite, Typescript 환경에서 프로젝트를 시작할 때 절대경로와 임포트 순서를 설정하고 있습니다.
- 매번 프로젝트를 할때마다 찾아보고 적용은 하지만, 적용 후 잊어버리고 다시 프로젝트를 하면 또 찾아보는 일이 반복되다보니, 이번 기회에 제대로 학습하고 블로그에 기록으로 남겨두려 합니다.
- 이번 포스트에서는 절대경로 설정하는 것만 다루고 다음 포스트에 임포트 순서를 설정하는 것을 다루겠습니다.
절대경로 설정
- Vite, Javascript 환경에서는 vite.config.js 파일에만 옵션을 설정해주면 되지만, 저는 Typescript를 사용하기 때문에 Typescript 기준으로 작성하겠습니다.
- Vite, Typescript 환경에서는 vite.config.js와 tsconfig.app.json 파일 둘다 설정을 해줘야합니다.
- vite resolve.alias
vite.config.js 설정
- vite에서는 resolve.alias 설정을 사용해 경로를 지정할 수 있습니다.
- alias 배열안에 객체 형태로 find, replacement를 입력하면 됩니다.
- find: 대체할 문자열
- replacement: 실제 경로(절대 경로를 입력해야함)
- 이때 replacement에는 절대 경로를 입력해야 하는데 절대 경로를 쉽게 추출하기 위해 path를 사용합니다.
path, __dirname
- path는 운영체제에 맞는 경로를 자동으로 생성해줍니다.
- 운영체제마다 파일 경로 표기 방식이 다르기 때문에 path를 사용해 운영체제에 맞는 절대경로를 생성합니다.
- Windows → C:\Users\myuser\project\src
- macOS/Linux → /Users/myuser/project/src
- path.resolve(...paths)는 여러 개의 경로를 인자로 받아 절대경로를 생성합니다.
- __dirname은 현재 위치한 디렉토리 경로를 가리킵니다.
- path.resolve(__dirname, "src") 이렇게 하면 현재 위치한 디렉토리 경로의 src 파일을 가리키게 됩니다.
- 저는 아래와 같이 설정했습니다.
설정
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import path from 'path';
export default defineConfig({
plugins: [react()],
resolve: {
alias: [
{ find: "@", replacement: path.resolve(__dirname, "src") },
{ find: "@components", replacement: path.resolve(__dirname, "src/components") },
{ find: "@pages", replacement: path.resolve(__dirname, "src/pages") },
{ find: "@utils", replacement: path.resolve(__dirname, "src/utils") }
]
}
});
tsconfig.app.json 설정
- tsconfig.node.json과 tsconfig.app.json이 있는데, 브라우저에서 실행될 src 파일만 절대경로를 설정할거기 때문에 tsconfig.app.json에 설정을 합니다.
- tsconfig.app.json에서 paths 옵션을 설정하면 vite.config.js에서 설정한 alias를 Typescript가 인식할 수 있도록 할 수 있습니다.
- 아래와 같이 설정합니다.
{
"compilerOptions": {
...
"baseUrl": "./",
"paths": {
"@/*": ["src/*"],
"@components/*": ["src/components/*"],
"@pages/*": ["src/pages/*"],
"@utils/*": ["src/utils/*"]
}
},
...
}
- baseUrl은 경로를 해석할 때 기준이 되는 루트 디렉토리를 설정합니다.
- "./"로 설정하면 루트 디렉토리를 기준으로 경로 해석
- "src"로 설정하면 src 디렉토리를 기준으로 경로 해석
- paths에는 절대 경로를 지정하고 싶은 경로들을 별칭:경로 순으로 입력하면 됩니다.
- 이렇게 하면 아래와 같이 결과가 나옵니다.
import Component1 from "@components/Component1";
import Page1 from "@pages/Page1";
import util1 from "@utils/util1";
function App() {
util1();
return (
<>
<Component1/>
<Page1/>
</>
);
}
export default App;