1. 문제 정의

타입 체크(type-check)를 수행했을 때, 아래와 같이 절대 경로에서 에러가 발생한다.

image.png

2. 올바른 동작 정의

  1. when : ts-check 스크립트를 입력했을 때
  2. then : 에러가 발생하지 않아야 한다.

3. 사실 수집

  1. IDE상에서는 에러가 발생하지 않는다.

    image.png

  2. ts-check는 tsc —-noEmit 스크립트이다.

    tsc는 타입스크립트 컴파일러 cli 명령어이고, —-noEmit은 TS파일을 트랜스파일한 JS파일을 만들지 말라는 의미이다.

4. 원인 가설

  1. 절대 경로 설정을 잘못했다.

    TODO : tsconfig.json을 확인한다.

    {
      "extends": "@extension/tsconfig/utils",
      "compilerOptions": {
        "baseUrl": ".",
      },
      "include": ["index.ts", "lib/**/*.ts", "bridge/**/*.ts"]
    }
    

    baseUrl : “.”으로 설정이 되어 있다.

    <aside> 💡

    baseUrl

    baseUrl을 “./”로 설정할 경우, Typescript는 파일을 tsconfig.json과 같은 폴더 depth부터 탐색을 한다.

    </aside>

  2. typescript 버전을 workspace와 다르게 사용하고 있다.

    TODO : shift + command + p로 typescript version을 확인한다.

  3. typescript에서 에러를 뱉는 게 아니다.

    image.png

    실행했을 때 에러를 잘 읽어보면, vite에서 에러가 발생한 것임을 알리고 있다.

    vite에서 절대경로 인식을 못하고 있는 게 아닐까?

    // chrome-extension/vite.config.mts
    // ..
    const libDir = resolve(rootDir, 'lib');
    export default defineConfig({
      resolve: {
        alias: {
          '@root': rootDir,
          '@lib': libDir,
          '@assets': resolve(libDir, 'assets'),
        },
      },
      // ..
    });
    

    lib폴더의 경우 lib폴더를 인식하여 @lib로 변환해주고 있다.

    <aside> 💡

    vite resolve.alias

    entries 옵션처럼 @rollup/plugin-alias를 넘긴다. 파일 시스템 경로를 aliasing할 때, 언제나 절대 경로를 사용해야 한다. 상대 alias 값은 파일 시스템에서 resolve되지 않을 것이다.

    </aside>

    <aside> 💡

    build.rollupOptions

    : 기존 Rollup번들을 커스텀한다.

조치

rollupOptions에 설정을 해도 에러가 계속 발생하여, 상대 경로로 지정함으로써 해결하였다.