[CRA] create-react-app 프로젝트에 module-alias 적용하기
프로젝트의 폴더 구조를 개선해 나가다 보면 폴더 구조의 depth 가 깊어짐에 따라 import xxx from '../../../../utils'
와 같이 보기 싫은 코드가 만들어 질 수 있다.
프로젝트/src 폴더 기준으로 간단하게 import xxx from '@/utils'
와 같이 접근하여 사용할 수 있으면 참 좋겠다는 바램이 생긴다. (그리고 module-alias 모듈이 바로 우리의 바램을 만족시킨다)
특별히 CRA로 생성한 프로젝트에 module-alias 를 이용해 path 별칭을 세팅하는 방법을 공유한다.
CRA 앱 추출
(뭔가 세부적인 커스터마이징을 하려면 먼저 이렇게 해야함)
yarn eject
module-alias 설치
(웹팩 빌드타임에만 사용될 것이므로 -D 로 설치)
yarn add -D module-alias
package.json 루트 위치에 별칭 정의
...
"_moduleAliases": {
"@": "src"
}
...
webpack.config.js 에 매핑 정보를 등록
웹팩에서 package.json 에 정의된 매핑 정보를 사용할 수 있도록 또 등록해 줘야 한다
config/webpack.config.js 에 별칭 매핑 정보(appPackageJson._moduleAliases
)를 등록
...
alias: {
// Support React Native Web
// https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/
'react-native': 'react-native-web',
// Allows for better profiling with ReactDevTools
...(isEnvProductionProfile && {
'react-dom$': 'react-dom/profiling',
'scheduler/tracing': 'scheduler/tracing-profiling',
}),
...(modules.webpackAliases || {}),
...(appPackageJson._moduleAliases || {}),
},
...
appPackageJson
변수는 위쪽에 보면 const appPackageJson = require(paths.appPackageJson)
와 같이 package.json 파일 내용이 담겨 있음을 확인할 수 있다
/scripts/start.js, build.js 에 module-alias 모듈 등록
코드 상단에 적절한 곳에 아래 코드를 삽입한다
// set module-alias
require('module-alias/register')
끝~
Ref.
https://www.npmjs.com/package/module-alias
Comments