에러

Yarn Berry 사용 시 에러 해결 방법(ERR_INVALID_ARG_TYPE / Cannot find module ... )

SparkIT 2024. 11. 8. 15:38

저는 npm에서 yarn berry로 갈아타던 중 예상치 못한 에러가 몇 가지 발생해 고생한 경험이 있습니다. 이런 에러들과 제가 에러를 해결한 방법에 대해 공유드리려합니다.

 

1. ERR_INVALID_ARG_TYPE

node:buffer:587
      throw new ERR_INVALID_ARG_TYPE(
            ^

TypeError [ERR_INVALID_ARG_TYPE]: The "list[2]" argument must be an instance of Buffer or Uint8Array. Received type string ('app.controller.d.ts')
    at Function.concat (node:buffer:587:13)
    at node:internal/fs/rimraf:144:32
    at Array.forEach (<anonymous>)
    at node:internal/fs/rimraf:143:5
    at /Users/shin/TodaysProject/yarn-project/.pnp.cjs:12971:13 {
  code: 'ERR_INVALID_ARG_TYPE'
}

Node.js v20.17.0

위 에러는 제가 node 버전 20.17.0 환경에서 NestJS 애플리케이션을 실행했을 때 생긴 에러입니다. 여러 검색 결과 node 버전이 yarn berry와 충돌해 발생한 에러일 수 있다며 node 버전을 낮출 것을 권장했습니다. 그래서 node를 18.20.4 버전으로 낮췄습니다. 저의 경우 nvm을 사용 중이었기 때문에 다음과 같은 명령어를 사용했습니다.

nvm install lts/hydrogen # 18.20.4 버전을 의미합니다.
nvm use lts/hydrogen

결과적으로 위 에러는 사라졌지만, 또 다른 에러가 발생했습니다. 해당 에러는 아래와 같습니다.

 

2. Cannot find module 

src/app.controller.ts:1:33 - error TS2307: Cannot find module '@nestjs/common' or its corresponding type declarations.

1 import { Controller, Get } from '@nestjs/common';
                                  ~~~~~~~~~~~~~~~~
src/app.module.ts:1:24 - error TS2307: Cannot find module '@nestjs/common' or its corresponding type declarations.

1 import { Module } from '@nestjs/common';
                         ~~~~~~~~~~~~~~~~
src/app.service.ts:1:28 - error TS2307: Cannot find module '@nestjs/common' or its corresponding type declarations.

1 import { Injectable } from '@nestjs/common';
                             ~~~~~~~~~~~~~~~~
src/main.ts:1:29 - error TS2307: Cannot find module '@nestjs/core' or its corresponding type declarations.

1 import { NestFactory } from '@nestjs/core';
                              ~~~~~~~~~~~~~~

Found 4 error(s).

위와 같이 NestJS 기본 명령어를 통해 생성한 새로운 NestJS 애플리케이션의 import 문에서 에러가 발생했습니다. 검색 결과 이 또한 버전 관련 이슈로 타입스크립트의 버전을 낮추는 것을 권장한다고 했습니다. 그래서 타입스크립트 버전을 5.x.x 에서 4.x.x 버전으로 낮췄습니다. package.json 파일 속 devDependencies 속 typescript 버전을 수정했습니다.

결과적으로 위 에러가 해결되며 정상적으로 NestJS 애플리케이션이 실행되었습니다. 하지만 여기서도 에러는 계속됩니다..😂 실제 애플리케이션 자체는 정상적으로 실행되지만, vscode 코드 편집기 상에서 @nestjs/common 같은 모듈을 import 하는 코드가 빨간색으로 표시되며 다음과 같은 에러를 표시했습니다. 해당 에러는 다음과 같습니다.

 

3. @nestjs/core' 모듈 또는 해당 형식 선언을 찾을  없습니다.

import { NestFactory } from '@nestjs/core';

이런 모듈 import 과정에 빨간줄로 에러가 표시되는 것인데요. 실제 애플리케이션 실행에는 문제가 없어 무시할까 했지만 이런 에러 표시가 추후에 발생할 다른 에러 표시와 혼동을 줄 가능성이 있다고 생각해 해결하기로 결정했습니다.

yarn dlx @yarnpkg/sdks vscode

먼저 위 명령어를 통해 vscode 설정을 Yarn의 플러그인 방식으로 구성합니다. 이를 통해 프로젝트마다 typescript나 eslint, prettier 버전을 다르게 가져갈 수 있습니다.

설치가 완료되면 vscode에서 main.ts 같은 타입스크립트 파일을 열고 여기서 F1 키를 눌러줍니다. 그리고 Typescript: Select Typescript version ... 을 클릭해줍니다. 그 다음 방금 설치한 sdks 폴더 하위에 있는 타입스크립트를 클릭해주면 위 에러도 해결됩니다.