August
7th,
2019
1.
2.
2.
Why?
프로젝트가 복잡해지고 Directory depth 가 깊어지다보면 공통으로 사용하는 utils 함수나 entities 들을 import 할 때 상대경로부분이 매우 지저분해진다.
tsconfig.json
설정만으로 적용할 순 없을지 시도 해보았지만 제대로 되지 않았던 경험이 있다.
그러다 다른 이유로 링크를 보게 되었고 절대경로 설정에 힌트를 얻어 시도하게 되었다.
설정 방법
Remark
tsconfig.json
을 이용하여 typescript 설정은 되어있음을 가정한다.- ./src 에 있는
.ts
파일을 ./dist 로 transpiling 한다. - ./src/utils 는 @utils 로, ./src/entities 는 @entities 로 alias 설정을 한다.
설정의 핵심은 babel
을 이용하여 typescript 를 javascript 로 transpiling 하는 것이다.
설정 방법을 간단히 요약하면 아래와 같다.
tsconfig.json
에 paths 설정.babelrc
에module-resolver
plugin 을 이용, alias 설정- (Option)
jest.config.js
에 moduleNameMapper 설정
1. tsconfig.json
설정
절대경로 설정에 필요한 부분만 분리해서 보면 아래와 같다.
{
"compilerOptions": {
"baseUrl": ".",
"outDir": "dist",
"rootDir": "src",
"paths": {
"@utils/*": [
"src/utils/*"
],
"@entities/*": [
"src/entities/*"
]
}
}
}
2. babel
설정
babel
을 사용하여 우리의 목적을 달성하기 위해선 아래의 의존성을 추가해야 한다.
❯ npm i -D @babel/cli @babel/preset-env @babel/preset-typescript babel-plugin-module-resolver
그 이후엔 Project root directory 에 아래와 같이 .babelrc
파일을 생성한다.
{
"presets": [
[
"@babel/env",
{
"targets": {
"node": "current"
}
}
],
"@babel/typescript"
],
"plugins": [
[
"module-resolver",
{
"extensions": [
".ts"
],
"root": [
"."
],
"alias": {
"@utils": "./src/utils",
"@entities": "./src/entities"
}
}
]
],
"comments": false,
"ignore": [
"./src/__tests__"
]
}
이제 package.json
에 babel
을 통해 .ts 파일을 .js 파일로 transpiling 하는 명령어를 추가한다.
{
"scripts": {
"build": "babel src --out-dir dist --extensions '.ts'"
}
}
3. Test framework - Jest 설정
jest.config.js
를 통해 jest 설정을 관리하고 있다면 해당 파일에 아래의 설정을 추가한다.
module.exports = {
moduleNameMapper: {
'^@utils(.*)$': '<rootDir>/src/utils$1',
'^@entities(.*)$': '<rootDir>/src/entities$1',
}
}
Bonus
1. nodemon 을 이용한 watch 설정
nodemon 및 @babel/node 의존성을 추가한다.
❯ npm i -D nodemon @babel/node
nodemon.json
을 Project root 에 아래와 같이 추가한다.
{
"ignore": [
"node_modules"
],
"watch": [
"src",
"package-lock.json"
],
"exec": "babel-node --extensions '.ts' src/index.ts",
"ext": "ts"
}
package.json
에는 아래의 script 를 적용한다.
{
"scripts": {
"start": "nodemon"
}
}
2. .d.ts
파일 생성하기
간혹 npm 에 모듈을 만들어 배포 할 일이 생기면 .d.ts
파일이 필요할 때가 있다. 이를 위해 해당 파일을 만드는 명령어도 추가 해놓았다.
{
"scripts": {
"build:js": "babel src --out-dir dist --extensions '.ts'",
"build:types": "tsc --emitDeclarationOnly --noEmit false -d",
"build": "yarn build:js"
}
}