jsconfig.json
jsconfig.json이란?
디렉토리에 jsconfig.json 파일이 존재한다는 것은 해당 디렉토리가 JavaScript 프로젝트의 루트임을 나타냅니다. jsconfig.json 파일은 루트 파일과 JavaScript 언어 서비스에서 제공하는 기능에 대한 옵션을 지정합니다.
팁: JavaScript를 사용하지 않는다면
jsconfig.json에 대해 걱정할 필요가 없습니다.
팁:
jsconfig.json은 TypeScript 설정 파일인 tsconfig.json의 파생 파일입니다.jsconfig.json은"allowJs"속성을true로 설정한tsconfig.json입니다.
jsconfig.json 파일이 필요한 이유는 무엇인가요?
Visual Studio Code의 JavaScript 지원은 두 가지 모드로 실행될 수 있습니다.
-
파일 범위 - jsconfig.json 없음: 이 모드에서는 Visual Studio Code에서 열린 JavaScript 파일이 독립적인 단위로 취급됩니다.
a.js파일이b.ts파일을 명시적으로 참조하지 않는 한 (import또는 CommonJS 모듈을 사용하든), 두 파일 간에는 공통 프로젝트 컨텍스트가 없습니다. -
명시적 프로젝트 - jsconfig.json 사용: JavaScript 프로젝트는
jsconfig.json파일로 정의됩니다. 디렉토리에 이러한 파일이 존재한다는 것은 해당 디렉토리가 JavaScript 프로젝트의 루트임을 나타냅니다. 파일 자체는 선택적으로 프로젝트에 속한 파일, 프로젝트에서 제외될 파일, 그리고 컴파일러 옵션(아래 참조)을 나열할 수 있습니다.
작업 공간에 프로젝트 컨텍스트를 정의하는 jsconfig.json 파일이 있으면 JavaScript 환경이 개선됩니다. 이러한 이유로, 새로운 작업 공간에서 JavaScript 파일을 열 때 jsconfig.json 파일을 생성하라는 힌트를 제공합니다.
jsconfig.json의 위치
이 코드를 웹사이트의 클라이언트 측으로 정의하고, jsconfig.json 파일을 생성하여 JavaScript 프로젝트로 만듭니다. 아래와 같이 JavaScript 코드의 루트에 파일을 배치하세요.

더 복잡한 프로젝트에서는 작업 공간 내에 여러 개의 jsconfig.json 파일을 정의할 수 있습니다. 이는 한 프로젝트의 코드가 다른 프로젝트의 코드에 IntelliSense로 제안되지 않도록 하기 위함입니다. 아래는 client 및 server 폴더가 있는 프로젝트를 보여주며, 두 개의 별도 JavaScript 프로젝트를 나타냅니다.

예시
기본적으로 JavaScript 언어 서비스는 JavaScript 프로젝트의 모든 파일을 분석하고 IntelliSense를 제공합니다. 올바른 IntelliSense를 제공하려면 제외하거나 포함할 파일을 지정해야 합니다.
"exclude" 속성 사용하기
exclude 속성(glob 패턴)은 언어 서비스에 소스 코드에 포함되지 않는 파일을 알려줍니다. 이는 성능을 높게 유지합니다. IntelliSense가 느리다면 폴더를 exclude 목록에 추가하세요(VS Code는 속도 저하를 감지하면 이를 수행하라는 메시지를 표시합니다).
{
"compilerOptions": {
"module": "CommonJS",
"target": "ES6"
},
"exclude": ["node_modules"]
}
팁: 빌드 프로세스에 의해 생성된 파일(예:
dist디렉토리)은exclude해야 합니다. 이러한 파일은 제안이 두 번 표시되도록 하고 IntelliSense 속도를 늦춥니다.
"include" 속성 사용하기
또는 include 속성(glob 패턴)을 사용하여 프로젝트의 파일을 명시적으로 설정할 수 있습니다. include 속성이 없으면 기본적으로 포함된 디렉토리와 하위 디렉토리의 모든 파일이 포함됩니다. include 속성이 지정되면 해당 파일만 포함됩니다. 명시적인 include 속성이 있는 예는 다음과 같습니다.
{
"compilerOptions": {
"module": "CommonJS",
"target": "ES6"
},
"include": ["src/**/*"]
}
팁:
exclude및include의 파일 경로는jsconfig.json의 위치를 기준으로 합니다.
jsconfig 옵션
JavaScript 언어 지원을 구성하기 위한 jsconfig "compilerOptions"는 다음과 같습니다.
팁: JavaScript에는 실제 컴파일이 필요하지 않으므로
compilerOptions에 혼동하지 마세요.jsconfig.json은 TypeScript 컴파일에 사용되는tsconfig.json의 파생 파일이기 때문에 이 속성이 존재합니다.
| 옵션 | 설명 |
|---|---|
noLib |
기본 라이브러리 파일(lib.d.ts)을 포함하지 마세요. |
target |
사용할 기본 라이브러리(lib.d.ts)를 지정합니다. 값은 "ES3", "ES5", "ES6", "ES2015", "ES2016", "ES2017", "ES2018", "ES2019", "ES2020", "ES2021", "ES2022", "ES2023", "ESNext"입니다. |
module |
모듈 코드를 생성할 때 모듈 시스템을 지정합니다. 값은 "AMD", "CommonJS", "ES2015", "ES2020", "ES2022", "ES6", "Node16", "NodeNext", "ESNext", "None", "System", "UMD"입니다. |
moduleResolution |
import에 대한 모듈 해석 방법을 지정합니다. 값은 "Node", "Classic", "Node16", "NodeNext", "Bundler"입니다. |
checkJs |
JavaScript 파일에 대한 유형 검사를 활성화합니다. |
experimentalDecorators |
제안된 ES 데코레이터에 대한 실험적인 지원을 활성화합니다. |
allowSyntheticDefaultImports |
기본 내보내기가 없는 모듈에서 기본 가져오기를 허용합니다. 이는 코드 내보내기에는 영향을 미치지 않으며 유형 검사만 영향을 받습니다. |
baseUrl |
상대적이지 않은 모듈 이름을 해석하기 위한 기본 디렉토리입니다. |
paths |
baseUrl 옵션을 기준으로 계산될 경로 매핑을 지정합니다. |
사용 가능한 compilerOptions에 대한 자세한 내용은 TypeScript compilerOptions 문서에서 읽을 수 있습니다.
webpack 별칭 사용하기
webpack 별칭으로 IntelliSense를 사용하려면 paths 키를 glob 패턴으로 지정해야 합니다.
예를 들어, 'ClientApp' 별칭의 경우
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"ClientApp/*": ["./ClientApp/*"]
}
}
}
그런 다음 별칭을 사용하려면
import Something from 'ClientApp/foo';
모범 사례
가능한 경우 프로젝트 소스 코드의 일부가 아닌 JavaScript 파일이 포함된 폴더는 제외해야 합니다.
팁: 작업 공간에
jsconfig.json파일이 없으면 VS Code는 기본적으로node_modules폴더를 제외합니다.
다음은 일반적인 프로젝트 구성 요소를 제외하는 것이 권장되는 설치 폴더에 매핑하는 표입니다.
| 구성 요소 | 제외할 폴더 |
|---|---|
node |
node_modules 폴더 제외 |
webpack, webpack-dev-server |
콘텐츠 폴더, 예를 들어 dist를 제외합니다. |
bower |
bower_components 폴더 제외 |
ember |
tmp 및 temp 폴더 제외 |
jspm |
jspm_packages 폴더 제외 |
JavaScript 프로젝트가 너무 커져 성능이 느려지면 종종 node_modules와 같은 라이브러리 폴더 때문입니다. VS Code가 프로젝트가 너무 커졌다고 감지하면 exclude 목록을 편집하라는 메시지를 표시합니다.