╱╱╭╮╱╱╱╱╱╱╭━━━╮╱╱╱╭╮╱╭╮╱╱╱╱╱╱ ╱╱┃┃╱╱╱╱╱╱┃╭━╮┃╱╱╱┃┃╱┃┃╱╱╱╱╱╱ ╱╱┃┣━━┳━━╮┃┃╱┃┣━╮╱┃╰━╯┣━━┳━╮╱ ╭╮┃┃╭╮┃┃━┫┃╰━╯┃╭╮╮┃╭━╮┃╭╮┃╭╮╮ ┃╰╯┃╭╮┃┃━┫┃╭━╮┃┃┃┃┃┃╱┃┃╭╮┃┃┃┃ ╰━━┻╯╰┻━━╯╰╯╱╰┻╯╰╯╰╯╱╰┻╯╰┻╯╰╯

Frontend/Typescript

[Typescript] node 환경에서 빌드하기 tsconfig.node.json

재안안 2025. 3. 9. 14:36

이전 프로젝트에서 겪었던 특이사항을 기록하려고 한다.

 

노드환경에서는 빌드가 안되네?

  이전 진행했던 프로젝트에서 Git Action을 통해 CI/CD를 수행했다. Git Action의 workflow를 통해 프로젝트를 빌드를 했는데 도중 에러가 발생했다. workflow 실행 중 스크립트에 적었던 `npm run build`에서 에러가 발생했다. 그래서 해당 에러 로그를 시작으로 빌드를 성공할 때까지 리서치하며 tsconfig.node.json의 속성을 하나 하나 바꿨다. 에러가 꼬리에 꼬리를 무는 형식으로 나와서 이에 관련해서 백지인 상태에서도 잘 따라갈 수 있었다.

 

최종 tsconfig.node.json은 아래와 같다.

{
  "compilerOptions": {
    "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
    "target": "ES2022",
    "lib": ["ES2023", "WebWorker"],
    "module": "ESNext",
    "skipLibCheck": true,
    "composite": true,
    "noEmit": false,

    /* Bundler mode */
    "moduleResolution": "Bundler",
    "allowImportingTsExtensions": false,
    "isolatedModules": true,
    "moduleDetection": "force",

    "baseUrl": "./",
    "paths": {
      "@/*": ["src/*"]
    },
    "types": ["node"],

    /* Linting */
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true,
    "noUncheckedSideEffectImports": true
  },
  "include": ["vite.config.ts"]
}

 

- `"skipLibCheck": true` :  라이브러리 파일의 타입 검사를 건너뜀

- `"composite": true` : 빌드 정보를 tsBuildInfoFile에 저장하여 이후 빌드 시 변경된 파일만 다시 컴파일

- `"noEmit": false` : Node 환경에서는 빌드 산출물이 필요하므로 해당 속성이 필요


  추가적으로 함께 사용했던 CI workflow는 다음과 같다.

name: CI  

on:  
  push:  
    branches:  
      - main  

jobs:  
  deploy:  
    runs-on: ubuntu-latest  

    steps:  
      - name: Checkout code  
        uses: actions/checkout@v3  

      - name: 노드 설치  
        uses: actions/setup-node@v3  
        with:  
          node-version: 20  

      - name: 노드모듈스 캐싱  
        uses: actions/cache@v3  
        id: cache  
        with:  
          path: '\*\*/node\_modules'  
          key: ${{ runner.os }}-node-${{ hashFiles('\*\*/package-lock.json') }}  
          restore-keys: |  
            ${{ runner.os }}-node-  

      - name: .env 생성  
        run: |  
          echo "VITE\_BASE\_URL=${{ secrets.VITE\_BASE\_URL }}" >> .env  

      - name: 아직은 의존성 매번 새로 설치  
        run: npm ci  

      - name: 린트  
        run: npm run lint  

      - name: 빌드  
        run: npm run build

'Frontend > Typescript' 카테고리의 다른 글

[Typescript] map() 관련 번들 사이즈 줄이기  (0) 2024.07.07