14.React typeScript 절대경로 적용하기 with CRA

Updated:


CRA + typeScript

  • 프로젯트 폴더 구조가 겹겹인 경우, import 경로를 상대 경로로 하면 코드가 길어지고 보기 어렵기 때문에 대부분 절대 졀대경로를 사용합니다.

절대경로를 설정하는 방법은 대략 세가지 정도가 있습니다.

  • Babel plugin

  • Webpack,Fusebox…(module bundlers)

  • create-react-app, create-react-app-ts

여기선 CRA 에서 webpack 설정을 바꿔줘야 하는데 그러면 eject 를 해야 되기 때문에 craco 를 이용해서 CRA 를 쉽게 설정 할 수 있습니다.

Craco 란?

Craco (Create React App Configuration Override) 는 CRA 를 쉽제 설정하고 eject 를 안해도 eslint, babel, postcss 등을 쉽게 설정할 수 있습니다.

Craco 설치 및 적용방법

yarn add @craco/craco

yarn add craco-alias -D

1.Package.json 파일을 수정합니다.

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

2.tsconfig.paths.json 파일을 루트에 생성하고 paths 설정을 합니다.

// src/tsconfig.paths.json 
// paths  프로젝트의 폴더명에 따라서 바꿔 
// 위의 comments  지워야지 나중에 compile  parse json error  발생하지 않음
{
  "compilerOptions": {
    "baseUrl": "./",
    "paths": {
      "pages/*": ["src/pages/*"],
      "components/*": ["src/components/*"],
      "styles/*": ["src/styles/*"]
    }
  }
}

3.root 경로에 craco.config.js 파일을 생성합니다.

// src/craco.config.js
const CracoAlias = require("craco-alias");

module.exports = {
  plugins: [
    {
      plugin: CracoAlias,
      options: {
        source: "tsconfig",
        tsConfigPath: "tsconfig.paths.json",
      },
    },
  ],
};

🔷 Options 설정

  • source: default 값은 options로, jsconfig, tsconfig 선택 가능

  • baseUrl: default 값은 ./로 root 폴더를 가리킴

  • aliases: alias 이름과 경로, default 값은 {}

  • tsConfigPath: 만약 source가 tsconfig이라면 해당 파일 이름 작성

  • debug: default 값은 false이며, 만약 버그가 생긴다면 해당 값을 true로 바꾸어 console로 내용 확인 가능

4.tsconfig.json 파일에 extends 를 추가 합니다.

// src/tsconfig.json
{
  "extends": "./tsconfig.paths.json",
  "compilerOptions": {
	...
  }
  "include": [
    "src",
    "tsconfig.paths.json"
  ]
}

5.적용하기

// 상대 경로와 다르게 src 를 절대경로로 설정하여 보다 직관적으로 import 할 수 있게 됨
import Dropdown from "components/Dropdown";
import Banner from "components/Banner";

각 폴더별 index.ts 모듈로 관리하기

  • project 안에 components, pages 등 해당 폴더 안의 index.ts 를 만들어 줍니다.
//  in index.ts
export {default as Dropdown } from './Dropdown'
export {default as Header } from './Header'
...
  • import 하려는 파일에서는 index 만 가져 오면 됨

import {Dropdown, Header} from ‘component/index.ts’

🔶 🔷 📌 🔑

Reference

Categories:

Updated:

Leave a comment