glowing713
Frontend-Deep-Dive
glowing713
전체 방문자
오늘
어제
  • 분류 전체보기 (97)
    • Languages (11)
      • JavaScript 💛 (3)
      • Python 🐍 (4)
      • Java ☕️ (3)
      • Swift 🧡 (1)
    • Computer_Science (1)
      • Computer_Network 🕸 (1)
    • Web_Frontend (4)
      • Vue.js (1)
    • Problem_Solving (76)
    • Server (1)
      • Spring 🍀 (1)
    • AI (2)
      • NLP 🗣 (1)
      • AI_Math ➗ (1)
    • 개발환경 꾸미기 ✌ (1)
    • 생각정리 ✍🏻 (1)

블로그 메뉴

  • 🧑🏻‍💻Github

공지사항

인기 글

태그

  • boostcampaitech
  • c++
  • Java
  • Stack
  • 2019 카카오 개발자 겨울 인턴십
  • 이분탐색
  • 완전탐색
  • Algorithm
  • 프로그래머스
  • bfs
  • Python
  • Baekjoon
  • DP
  • brute-force
  • 동적계획법
  • binary search
  • BOJ
  • 카카오 기출
  • ps
  • mst

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
glowing713

Frontend-Deep-Dive

[FE] jsconfig.json 알아보기
Web_Frontend

[FE] jsconfig.json 알아보기

2022. 1. 6. 18:21

jsconfig.json 파일이 무엇인가?

타입스크립트 config 파일인 tsconfig.json를 상속받았다고 생각하면 된다.

해당 파일이 위치한 경로가 JS 프로젝트의 root 디렉토리라고 명시하는 역할을 한다.

 

jsconfig 파일이 필요한 경우는 언제인가?

파일 스코프 - jsconfig 파일이 필요하지 않다. 어떤 방식으로도 a 파일과 b 파일이 서로 참조하지 않는 경우(import이든, CommonJS의 module이든) jsconfig는 없어도 된다. 즉, 이때는 VSCode에서 작업하는 JS 파일들은 각각 독립적인 유닛으로 처리된다.

명시적인 프로젝트 - jsconfig 파일이 필요하다. JS 프로젝트는 jsconfig 파일을 통해 구성된다. jsconfig 파일이 위치한 경로가 root 디렉토리임을 명시하는 셈이고, jsconfig 내의 설정을 통해 추가적으로 포함시킬 파일, 제외시킬 파일, 컴파일러 옵션 등 세부적인 설정을 할 수 있다.

만약, jsconfig 파일을 생성하지 않았다면 VSCode에서는 디폴트로 node_modules 폴더를 제외한다.

또한 프로젝트 사이즈가 너무 커지면 VSCode가 jsconfig의 exclude 속성을 수정하라는 알림을 준다고 한다.

 

jsconfig 파일의 위치는 어디인가?

프로젝트의 root 디렉토리로 지정할 곳에 포함시키면 된다.

website
├── client    # root
│   ├── client.js
│   └── jsconfig.json
└── ...

좀 더 복잡한 프로젝트인 경우, 다수의 jsconfig 파일이 필요할 수도 있다.

client와 server로 나뉘어진 JS 프로젝트인 경우, 다음과 같이 각각 jsconfig 파일이 추가된다.

website
├── client    # root
│   ├── client.js
│   └── jsconfig.json
├── server    # root
│   ├── server.js
│   └── jsconfig.json
└── ...

 

그렇다면 jsconfig로 무엇을 설정할 수 있나?

exclude: 내 소스 코드의 일부가 아닌 것을 지정한다. 이들을 제외함으로써 성능이 향상된다. 예를 들어, 인텔리센스가 너무 느린 경우, 불필요한 코드를 exclude에 포함함으로써 문제를 개선할 수 있다. (이 경우, VSCode가 자체적으로 이를 추천한다고 한다) 주로 node_modules 경로를 포함한다.

include: 임의로 프로젝트에 포함할 파일을 지정할 수 있다. jsconfig에 이 속성을 포함하지 않는다면, 디폴트 값으로 경로 내의 모든 파일을 포함한다.

compilerOptions: 여기에는 아래와 같은 옵션들이 있다. compilerOption이라 오해할 수도 있지만, javascript language support이다. 원래는 TS가 컴파일될 때 사용되는 옵션이지만, JS는 컴파일되지 않는다. jsconfig가 tsconfig의 상속 형태라서 이름을 가져온 것뿐이라고 한다.

  • noLib: 디폴트 라이브러리 파일(lib.d.ts)를 포함하지 않는다. 이 옵션을 활성화한다는 것은 Array, Boolean, Function, IArguments, Number, Object, RegExp, String과 같은 타입을 직접 새로 정의하여 사용하겠다는 뜻이다.😲
  • target: 어떤 티폴트 라이브러리(lib.d.ts)를 포함할지 명시한다. "es3", "es5", "es6", "es2015", "es2016", "es2017", "es2018", "es2019", "es2020", "esnext” 중에 선택할 수 있다.
  • module: 어떤 모듈 시스템을 사용할지 명시한다. "amd", "commonJS", "es2015", "es6", "esnext", "none", "system", "umd” 중에 선택할 수 있다.
  • checkJs: JS 파일의 type checking을 활성화한다. 모든 JS 파일에 각각 @ts-check를 포함시킨 것과 같다.
  • allowSyntheticDefaultImports: 모듈이 명시적으로 default export를 지정하지 않았을 때, default import가 가능하도록 한다. 타입체킹에만 영향을 준다.
import * as React from "react";   // 여기에서
import React from "react";        // 이걸 가능하게 한다.

/* 출처: 타입스크립트 공식문서 */
  • baseUrl: 모듈을 참조하는 과정을 훨씬 간단하게 만들어준다.
// baseUrl
// ├── ex.ts
// ├── hello
// │   └── world.ts
// └── tsconfig.json

// 예를들어 이 프로젝트에서  “baseUrl”: “./” 를 사용하면 JS는 jsconfig와 같은 경로에 위치한 모듈을 찾는다.

import { helloWorld } from "hello/world";

console.log(helloWorld);

//모듈을 import하는 과정에서 경로에 ../이나 ./가 포함되는 것이 불편했는데 훨씬 편리하게 사용할 수 있겠다!

/* 출처: 타입스크립트 공식문서 */
  • paths: baseUrl을 상대적으로하여 custom prefix를 작성하여 코드에서 모듈참조를 간편하게 할 수 있다.
{
  "compilerOptions": {
    "baseUrl": ".", // 이 옵션은 반드시 "paths"가 명확할 때 지정해야 합니다.
    "paths": {
      "jquery": ["node_modules/jquery/dist/jquery"] // 이 매핑은 "baseUrl"에 상대적입니다.
    }
  }
}

// 이렇게하면 import "jquery"를 작성하여 jquery 모듈을 사용할 수 있다.

{
  "compilerOptions": {
    "baseUrl": "src",
    "paths": {
        "app/*": ["app/*"],
        "config/*": ["app/_config/*"],
        "environment/*": ["environments/*"],
        "shared/*": ["app/_shared/*"],
        "helpers/*": ["helpers/*"],
        "tests/*": ["tests/*"]
    },
}

/* 출처: 타입스크립트 공식문서 */

 

  • moduleResolution: 모듈 해결 전략을 지정한다고 한다. “node”, “classic” 중에 선택할 수 있다.
  • experimentalDecorators

 

 

Reference

TypeScript 공식문서(https://www.typescriptlang.org/ko/tsconfig#compilerOptions)

VSCode 공식문서(https://code.visualstudio.com/docs/languages/jsconfig)

저작자표시 비영리 변경금지 (새창열림)

'Web_Frontend' 카테고리의 다른 글

[React.js] state가 undefined일 때 - this 바인딩  (0) 2022.03.08
[FE] img 태그 alt 속성 내용  (0) 2022.01.28
    'Web_Frontend' 카테고리의 다른 글
    • [React.js] state가 undefined일 때 - this 바인딩
    • [FE] img 태그 alt 속성 내용
    glowing713
    glowing713

    티스토리툴바