Today, What I learned?
์ฝ๋๋ฆฌ๋ทฐ ํผ๋๋ฐฑ ์ค ํ๋์๋ ์๋๊ฒฝ๋ก๋ฅผ ์ ๋๊ฒฝ๋ก๋ก ๋ณ๊ฒฝํด ๋ณด๊ธฐ ๋์ ๊ณผ์ ์ ๊ธฐ๋กํด ๋ณธ๋ค.. ๐
ํ์ ์คํฌ๋ฆฝํธ์ CRA๋ก ๋ง๋ค์ด์ง ํจํค์ง๋ค๋ณด๋ ๋ณ๊ฒฝํด ๋ณด๊ธฐ๊ฐ ๋ ์ฌ๊ฐ ์ฌ์ด ์ผ์ด ์๋์๋ค!..
์ฒซ ์๋
์ฒ์์ tsconfig.json์ baseUrl
๊ณผ paths
๋ฅผ ์ถ๊ฐํด์ฃผ์๋ค.
ํ์ง๋ง CRA๋ก ์์ฑ๋ ํ์
์คํฌ๋ฆฝํธ ํ๋ก์ ํธ์ธ์ง๋ผ ๋จ์ํ tsconfig.json์ ๋ช๋ช ์ค์ ์ ์ถ๊ฐํด ์ฃผ๋ ๊ฒ์ผ๋ก ๋๋์ง ์์๋ค.
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
...
}
}
์๋!.. CRA๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๊ฒฐํ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ํด ์นํฉ ์ค์ ์ด ๋ค์ด์๋ ํ์ผ๋ค์ ์จ๊ฒจ๋๊ณ ์๋ค.
์ด ํ์ผ๋ค์ ์ปค์คํ
ํ๊ณ ์ถ๋ค๋ฉด eject
๋ฅผ ํตํด์ ์ถ์ถํด์ ๋ณ๊ฒฝํด์ผ ํ๋ค.
eject๋ฅผ ํ๋ฉด ๋ฌด์์ด ๋ฌธ์ ์ธ๊ฐ??
- ํ ๋ฒ ์ถ์ถํ๊ณ ๋๋ฉด ์ค์ ๊ณผ ๊ด๋ จ๋ scripts ํด๋, config.. pacakage.json์ ์์กด์ฑ ๋ฑ ํ์ผ๋ค์ด ๋ ธ์ถ๋๋ค.
- ํ ๋ฒ ์ถ์ถ๋๋ฉด ๋๋๋ฆด ์ ์๋ค (!!)
- ๋ฒ์ ์ ์ ๋ํ ์ ๊ทธ๋ ์ด๋ ๋ถ๊ฐ๋ฅ..
- ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ ธ ์ค์ ํ๋ ค๋ ๋ถ๋ถ์ ์ฐพ๊ธฐ๊ฐ ํ๋ค๋ค.
๊ณ ๋ก ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์ ๋ ๋ฌ๋ค.
๋ ๋ฒ์งธ ์๋
์ฐธ๊ณ ๊ธ์ ๋ฐํ์ผ๋ก craco
๋ผ๋ ํจํค์ง๋ฅผ ์ค์นํด ๋ณด๊ธฐ๋ก ํ๋ค. craco
๋ Create-React-App Configuration Override์ ์ฝ์๋ก, ์์์ ์ธ๊ธํ eject
์์ด๋ ์ฌ๋ฌ ์ค์ ์ ์ค๋ฒ๋ผ์ด๋ฉ ํ ์ ์๋ ํจํค์ง๋ค.
์๋์ ๋ช ๋ น์ด๋ก ์ค์นํ ์ ์๋ค.
$ npm install @craco/craco --save
$ yarn add @craco/craco
์ด๋ ๊ฒ ์ค์นํ ํ์๋ package.json
์ react-scripts start
์ด๋ฐ ์์ผ๋ก ๋์ด์๋ script๋ฅผ craco๋ก ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํ๋ค.
// package.json
...
"scripts": {
"start": "craco start",
"build": "craco build",
"test": "craco test",
"eject": "craco eject"
}
์ฐธ๊ณ ๊ธ์ ๋ฐ๋ฅด๋ฉด ํ์ฌ craco-alias
๋ ๋ ์ด์ ์ฌ์ฉํ ์ ์๋ ํจํค์ง์ด๊ธฐ ๋๋ฌธ์ (2023.02์ ๊ธฐ์ค) react-app-alias
๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ด๋ฅผ ๋์ฒดํ์ฌ ์ฌ์ฉํ ์ ์๋ค๊ณ ํ๋ค. (์ด ํจํค์ง๊ฐ ์ข ๋ ํ์ฅ๋ ํจํค์ง์ธ๋ฏ??) CracoAliasPlugin
์ ๋ถ๋ถ์ react-app-alias
์์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
// craco.config.js
const { CracoAliasPlugin } = require('react-app-alias');
module.exports = {
plugins: [
{
plugin: CracoAliasPlugin,
options: {
source: 'tsconfig',
baseUrl: '.',
tsConfigPath: './tsconfig.paths.json',
},
},
],
};
paths๋ฅผ ์ข ๋ ์ธ๋ถํํด์ ์ธ ์๋ ์๋ค. @components
์๋ฐ ์์ผ๋ก.. ๋๋ ์ผ๋จ ์๋๊ฒฝ๋ก ์์ ../../../
๋ถ๋ถ๋ง ์์ ๋ณด๋ ค๊ณ ์ด๋ ๊ฒ ์ ์ฉํด ๋ณด์๋ค.
// tsconfig.paths.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
}
}
tsconfig.json
์ ์์ฑํ๋ tsconfig.paths.json ํ์ผ์ extends๋ก ์ถ๊ฐํด ์ค๋ค.
// tsconfig.json
{
"compilerOptions": {
...
},
"include": ["src", "src/utils/Api.ts"],
"extends": "./tsconfig.paths.json"
}
์ด๋ ๊ฒ ์ ์ฉํ์ ๋ ์๋์ ๊ฐ์ ์์ผ๋ก ์ ๋๊ฒฝ๋ก๋ฅผ ์ด์ฉํ ์ ์๋ค!
import { getSearchVideos } from '@/redux/modules/MediaSlice';
์ฐธ๊ณ
'๐ Studying > ๐ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Yarn Berry ์ค์ (0) | 2023.02.07 |
---|---|
Emotion vs SCSS vs Styled-components (0) | 2023.02.06 |
ํฌ๋๋ฆฌ์คํธ Recoil๋ก ๋ฆฌํฉํ ๋ง (0) | 2023.02.02 |
[Next.js] Next.js์ SSG, ISR (0) | 2023.02.01 |
[Next.js] Next.js ๊ธฐ๋ณธ ๊ฐ๋ (0) | 2023.01.31 |
Comment