npm start가 안돼요: Error [ERR_PACKAGE_PATH_NOT_EXPORTED]

사자·2023년 10월 6일
0
post-custom-banner

에러 발견


GitHub에 공유된 Nomad Coders 강의 소스코드를 clone한 뒤 npm inpm start로 프로젝트를 실행했더니 다음과 같은 에러가 발생, 실행할 수 없었다.

$ npm start

...

node:internal/modules/cjs/loader:488
      throw e;
      ^

Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './lib/tokenize' is not defined by "exports" in (프로젝트 경로)/node_modules/postcss-safe-parser/node_modules/postcss/package.json
    at new NodeError (node:internal/errors:371:5)
    at throwExportsNotFound (node:internal/modules/esm/resolve:429:9)
    at packageExportsResolve (node:internal/modules/esm/resolve:683:3)
	...
{
  code: 'ERR_PACKAGE_PATH_NOT_EXPORTED'
}

Node.js v18.2.0

원인


내 컴퓨터에 설치된 node 버전과 프로젝트에 설치된 패키지들의 버전이 충돌, Node가 잘못된 경로로 패키지를 import해서 발생하는 에러다.

내 경우 오래 전에 만들어져 업데이트되지 않은 프로젝트에서는 구버전 패키지를 사용하고 있어서 오류가 발생했다.

해결 방법


해결 방법은 두 가지가 있다. 아무거나 적용해서는 안 되고, 내 컴퓨터에 설치된 node 버전과 실행하려는 프로젝트의 상태에 따라 적합한 방법을 사용해야 한다.

  • 내 컴퓨터에 설치된 node 버전이 사용하는 패키지에 비해 최신 버전일 경우 → node 버전을 LTS 버전으로 다운그레이드한다.(1) 컴퓨터에 설치된 노드 버전은 다음 명령으로 확인할 수 있다.
    $ node -v
    v18.2.0
  • 프로젝트가 만들어진 지 오래 되었다.(오래된 구버전 패키지를 사용한다.) → 설치된 패키지를 업그레이드한다. (2) 프로젝트 패키지 버전 확인을 다음 명령으로 확인할 수 있다.
    $ npm show 모듈명 version
    내 프로젝트에서 사용중인 패키지들의 전체 버전을 확인할 때 npm-check-updates 패키지를 사용하면 편하다.
    # npm-check-updates 라이브러리 전역에 설치
    $ npm install -g npm-check-updates
    
    # 최신버전 확인
    $ ncu

1️⃣ node 버전 다운그레이드 — nvm 사용하기

node-version-manager(nvm) 패키지를 사용하면 시스템에 여러 개의 nodejs를 설치하고 사용할 버전을 전환할 수 있게 해준다.

nvm을 설치 및 사용하는 방법에 대해서는 이 글에서는 다루지 않는다. 이 블로그에서 잘 설명되어있다.

현재 node의 LTS 버전은 18.18.0, 가장 최신 버전은 20.8.0이다.(2023.10 기준)

만약 내 node 버전이 18.18.0 이상이거나, 프로젝트에서 사용하는 패키지가 오랫동안 node 버전에 맞춰 업데이트 되지 않았을 경우 node를 LTS 이하의 버전으로 다운그레이드가 필요할 수 있다.

단, 15 이하의 오래된 node 버전을 사용하면 앞으로 더 많은 외부 패키지를 사용해야 할 때 충돌이 있을 수도 있겠다.

2️⃣ 설치된 package 업그레이드 — ncu 사용하기

모듈을 최신 버전으로 업그레이드 하려면 터미널에서 npm update 모듈명 명령을 실행하면 되지만, 여러 개의 모듈을 사용하고 있을 경우 하나 하나 업데이트 하기 번거롭다.

# npm 모듈 버전 확인
$ npm show 모듈명 version

// npm 모듈 업데이트
$ npm update 모듈명

npm-check-updates(ncu) 패키지를 사용하면 package.json에 명시된 모듈들을 한번에 업데이트시켜줄 수 있다.

# npm-check-updates 라이브러리 전역에 설치
$ npm install -g npm-check-updates

# 최신버전 확인
$ ncu

# package.json 모듈 버전 수정
$ ncu -u

# 수정된 버전으로 모듈 설치
$ npm install

내 경우 설치된 패키지 버전을 확인하니 오래된 패키지가 많아 node 다운그레이드 대신 이 방법을 통해 해결했다. 최신 버전을 “안정적으로” 사용할 수 있다면 더 나은 방안이라고 생각했기 때문.

단, 각 패키지에서 사용하는 메소드 명이 바뀌는 등 이미 작성된 코드에 영향을 주는 큰 업데이트가 있었을 경우 추가적인 수정이 있을 수 있으니 주의해야 할 것 같다.

참고자료

profile
FrontEnd Developer 🦁사자의 성장 로그
post-custom-banner

0개의 댓글