Language/React

React/JSX - 절대경로 지정

건담아빠 2022. 8. 2. 14:45

 

`~/` 에 대한 절대경로를 추가해 보자.

 

1. paths alias 설정

$ yarn add --dev react-app-rewired customize-cra

 

2. jsconfig.json

{
  "extends": "./jsconfig.paths.json",
  "compilerOptions": {
    "module": "commonjs",
    "target": "es6"
  },
  "include": [
    "src"
  ],
  "exclude": [
    "./node_modules",
    "**/node_modules",
    "dist"
  ]
}

 

3. jsconfig.paths.json

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "~/*": [
        "src/*"
      ]
    }
  }
}

 

4. config-overrides

const { override, addWebpackAlias } = require('customize-cra');
const path = require('path');

module.exports = override(
  addWebpackAlias({
    '~': path.resolve(__dirname, 'src'),
  }),
);

 

5. 실행 스크립트 변경 (package.json)

{
  ...
  
  "scripts": {
    "start": "set PORT=3000 && react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test",
    "eject": "react-scripts eject"
  },
  
  ...
}

 

6. Test.js

import React from 'react';

class Test extends React.Component {
    render() {
        return (
            <React.Suspense>
                <br/>
                <br/>
                <br/>
                <div>test</div>
                <br/>
                <br/>
                <br/>
            </React.Suspense>
        )
    }
}

export default Test;

 

7. App.js

import logo from './logo.svg';
import './App.css';
import Test from '~/views/components/Test'

function App() {
  return (    
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <Test />
      </header>
    </div>
  );
}

export default App;

 

8. 확인

 

 

 

참고) paths alias
- 절대 경로를 사용하려면 tsconfig.json과 webpack의 설정을 건들여야 한다.
단순하게 tsconfig.json의 paths 설정을 바꾸면 된다 생각했지만 React 실행시 강제적으로 paths 설정을 지워 버린다. (충격...)
https://7stocks.tistory.com/127

- React + TypeScript 환경에서 절대경로 사용하기
https://velog.io/@hoo00nn/React-TypeScript-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-%EC%A0%88%EB%8C%80%EA%B2%BD%EB%A1%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

- Alias solution for rewired create-react-app
https://githubhot.com/repo/mryhchan/react-app-rewire-alias