tsconfig 환경설정

tsconfig.json 환경설정


기존 디폴트로 설정된 파일의 내용은 삭제후 아래와 같이 환경설정을 한다.

{
  "compilerOptions": {
    "target": "ESNext",
    "useDefineForClassFields": true,
    "lib": ["DOM", "DOM.Iterable", "ESNext"],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": false,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": false,
    "module": "ESNext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noImplicitAny": false,
    "noEmit": false,
    "declaration": true,
    "declarationDir": "./types",
    "jsx": "preserve",
    "baseUrl": "..",
    "paths": {
      "~/*": ["./client/src/*"],
      "test/*": ["./client/test/*"],
      "*": ["./client/*", "../node_modules/*"],
      "librechat-data-provider/*": ["./packages/data-provider/*"]
    }
  },
  "types": ["node", "jest", "@testing-library/jest-dom"],
  "exclude": ["node_modules", "vite.config.ts"],
  "include": [
    "src/**/*",
    "test/**/*",
    "../e2e/**/*",
    "test/setupTests.js",
    "env.d.ts",
    "../config/translations/**/*.ts"
  ]
}


tsconfig.json 파일은 TypeScript 컴파일러가 프로젝트를 컴파일하는 방식을 정의하는 데 사용됩니다. TypeScript 프로젝트에서 이 파일은 매우 중요하며, 코드의 타입 검사, 모듈 해석, 출력 방식 등을 제어합니다.

compilerOptions

이 객체는 TypeScript 컴파일러의 동작 방식을 구성하는 핵심 부분입니다.

  • target: "ESNext": 컴파일된 JavaScript 코드가 어떤 ECMAScript 버전으로 출력될지 지정합니다. "ESNext"는 가장 최신 버전의 ECMAScript 기능을 사용하겠다는 의미입니다.
  • useDefineForClassFields: true: 클래스 필드를 Object.defineProperty를 사용하여 정의할지 여부를 지정합니다. 이는 최신 JavaScript 표준과 더 잘 호환되게 합니다.
  • lib: ["DOM", "DOM.Iterable", "ESNext"]: 프로젝트에 포함할 기본 라이브러리 선언 파일을 지정합니다.
    • "DOM": 브라우저 환경의 표준 DOM(Document Object Model) API를 지원합니다.
    • "DOM.Iterable": DOM 관련 Iterable 프로토콜을 지원합니다.
    • "ESNext": 최신 ECMAScript 기능에 대한 타입 정의를 포함합니다.
  • allowJs: true: TypeScript 프로젝트에서 .js.jsx 파일을 허용합니다. 즉, JavaScript 파일과 TypeScript 파일을 함께 사용할 수 있습니다.
  • skipLibCheck: true: 모든 선언 파일(*.d.ts)의 타입 검사를 건너뜁니다. 주로 node_modules 내부의 라이브러리에서 발생하는 타입 오류를 무시하여 컴파일 시간을 단축하고 빌드 실패를 줄이는 데 사용됩니다.
  • esModuleInterop: false: CommonJS 모듈과 ES 모듈 간의 상호 운용성을 처리하는 방식을 비활성화합니다. 이 설정을 true로 하면 ES 모듈의 import * as React from 'react' 같은 구문을 import React from 'react'로 사용할 수 있게 해줍니다. 여기서는 `false``로 되어 있어 명시적인 CommonJS/ES 모듈 임포트 규칙을 따릅니다.
  • allowSyntheticDefaultImports: true: esModuleInteropfalse일 때, 기본 내보내기가 없는 모듈에서 기본 임포트(e.g., import React from 'react')를 허용합니다. 이는 일부 라이브러리에서 발생할 수 있는 문제를 해결하는 데 도움이 됩니다.
  • strict: true: 엄격한 타입 검사 옵션을 모두 활성화합니다. 이는 코드의 안정성과 가독성을 높이는 데 권장됩니다.
  • forceConsistentCasingInFileNames: false: 파일 이름의 대소문자 일관성을 강제하지 않습니다. 일반적으로 true로 설정하여 대소문자로 인한 문제를 방지하는 것이 좋지만, 여기서는 false로 되어 있습니다.
  • module: "ESNext": 생성될 모듈 코드의 종류를 지정합니다. "ESNext"는 ES Modules 형식을 사용하며, 이는 최신 브라우저와 번들러에 적합합니다.
  • moduleResolution: "node": 모듈을 해석하는 방식을 Node.js 방식으로 따릅니다. 이는 node_modules 디렉토리에서 모듈을 찾는 방식과 유사합니다.
  • resolveJsonModule: true: .json 파일을 모듈로 가져올 수 있도록 허용합니다.
  • isolatedModules: true: 각 파일을 독립적인 모듈로 간주합니다. 이는 Babel과 같은 트랜스파일러가 파일을 단일 파일로 처리하는 방식과 유사하며, 특정 타입스크립트 기능(e.g., const enum) 사용을 제한할 수 있습니다.
  • noImplicitAny: false: 명시적으로 타입을 선언하지 않은 경우 any 타입을 암시적으로 사용하는 것을 허용합니다. strict: true를 설정했음에도 불구하고 noImplicitAnyfalse로 명시적으로 재정의한 것으로 보입니다. 일반적으로 true로 설정하여 타입 안정성을 높이는 것이 권장됩니다.
  • noEmit: false: TypeScript 컴파일러가 JavaScript 파일을 출력하는 것을 허용합니다. true로 설정하면 타입 검사만 수행하고 실제 파일은 생성하지 않습니다. 이 설정은 주로 번들러(예: Vite, Webpack)가 트랜스파일을 담당할 때 사용됩니다.
  • declaration: true: 컴파일 시 .d.ts 선언 파일을 생성합니다. 이는 라이브러리를 만들 때 다른 TypeScript 프로젝트에서 타입 정보를 활용할 수 있도록 해줍니다.
  • declarationDir: "./types": 생성된 선언 파일(*.d.ts)이 저장될 디렉토리를 지정합니다. 여기서는 프로젝트 루트의 ./types 디렉토리에 저장됩니다.
  • jsx: "preserve": JSX 구문을 컴파일러가 그대로 유지하도록 지시합니다. JSX 트랜스폼은 Babel이나 Vite와 같은 다른 도구에서 처리할 것으로 예상됩니다.
  • baseUrl: "..": 모듈 해석의 기준 경로를 지정합니다. "../"는 현재 tsconfig.json 파일이 위치한 디렉토리의 상위 디렉토리를 기준으로 합니다.
  • paths: 모듈 임포트 경로에 대한 별칭(alias)을 정의합니다. 이는 긴 상대 경로 대신 짧은 별칭을 사용하여 모듈을 임포트할 수 있게 해줍니다.
    • "~/*": ["./client/src/*"]: ~/로 시작하는 경로는 ./client/src/ 디렉토리를 가리킵니다. (예: import someModule from '~/components/SomeComponent';)
    • "test/*": ["./client/test/*"]: test/로 시작하는 경로는 ./client/test/ 디렉토리를 가리킵니다.
    • "*": ["./client/*", "../node_modules/*"]: 모든 경로에 대해 먼저 ./client/ 디렉토리에서 모듈을 찾고, 없으면 ../node_modules/에서 찾도록 합니다.
    • "librechat-data-provider/*": ["./packages/data-provider/*"]: librechat-data-provider/로 시작하는 경로는 ./packages/data-provider/ 디렉토리를 가리킵니다.

types

  • "node", "jest", "@testing-library/jest-dom": 프로젝트에서 전역 타입으로 사용할 타입 정의 패키지를 명시적으로 지정합니다.
    • node: Node.js 환경에서 사용되는 전역 타입 (e.g., process, Buffer).
    • jest: Jest 테스트 프레임워크 관련 전역 타입.
    • @testing-library/jest-dom: Jest DOM 확장 라이브러리 관련 타입.

exclude

컴파일러가 타입 검사에서 제외할 파일 또는 디렉토리를 지정합니다.

  • "node_modules": 일반적으로 모든 의존성 패키지가 있는 디렉토리이므로 제외합니다.
  • "vite.config.ts": Vite 설정 파일은 일반적으로 번들링 과정에서 처리되므로 타입스크립트 컴파일 과정에서는 제외합니다.

include

컴파일러가 타입 검사를 포함할 파일 또는 디렉토리를 지정합니다. 이 경로에 있는 파일들만 컴파일됩니다.

  • "src/**/*": src 디렉토리 아래의 모든 파일과 하위 디렉토리를 포함합니다.
  • "test/**/*": test 디렉토리 아래의 모든 파일과 하위 디렉토리를 포함합니다.
  • "../e2e/**/*": 현재 디렉토리의 상위 디렉토리에 있는 e2e 디렉토리 아래의 모든 파일과 하위 디렉토리를 포함합니다.
  • "test/setupTests.js": 특정 테스트 설정 JavaScript 파일을 포함합니다.
  • "env.d.ts": 환경 변수 타입 정의 파일을 포함합니다.
  • "../config/translations/**/*.ts": 현재 디렉토리의 상위 디렉토리에 있는 config/translations 디렉토리 아래의 모든 TypeScript 파일을 포함합니다.

요약

tsconfig.json 파일은 프런트엔드 애플리케이션(아마도 React/Vite 기반) 개발을 위한 설정을 주로 담고 있습니다.

  • 최신 JavaScript 기능을 사용하고 JSX 구문을 보존하여 번들러가 처리하도록 합니다.
  • 엄격한 타입 검사(strict: true)를 활성화하여 코드 품질을 높이지만, noImplicitAny: false로 일부 유연성을 둡니다.
  • 모듈 해석 방식을 Node.js와 유사하게 설정하고, JSON 모듈 임포트를 허용합니다.
  • **경로 별칭(paths)**을 통해 복잡한 임포트 경로를 단순화하여 개발 편의성을 높였습니다.
  • Node.js, Jest, Testing Library와 같은 테스트 환경을 위한 타입 정의를 포함합니다.
  • 프로젝트의 소스 코드, 테스트 코드, E2E 테스트 코드, 설정 파일 등을 컴파일 대상에 명확히 지정하여 필요한 파일만 처리하도록 구성되어 있습니다.

이 설정은 개발자가 타입스크립트의 강력한 타입 시스템을 활용하면서도, 현대 웹 개발 워크플로우(번들러 사용, JSX)에 잘 통합될 수 있도록 고안 되었습니다.

댓글

이 블로그의 인기 게시물

아파치 보안관련 기본설정

티베로 이관 작업 절차

윈도우 네트워크 리소스 사용권한 오류