개발자
류준열

npm의 유령의존성

npm은 유령의존성이 있다. npm의 유령의존성을 설명해둔 글이 있는데 쉽게 이야기하면 설치 안한 패키지들이 딸려오는 현상이다.

npm의 유령의존성으로 인해 불필요하게 node_modules가 커질뿐 아니라 설치하지 않은 패키지들을 사용할 수 있게 된다.
결과적으로 프로젝트의 패키지 관리가 힘들어지게 된다.

npm을 사용할때의 node_modules

아래 사진을 보면 package.json에 date-fns를 검색했을때 0건이 검색되지만 실제로는 date-fns를 사용할 수 있다. npm 유령의존성 예시 date-fns

설치하지 않은 date-fns가 node_modules에 있는 것을 확인할 수 있다. node_modules에 date-fns가 있는 모습

node_modules를 지우고 다시 npm install을 하면 764 packages를 추가했다고 나온다. npm install

그럼 실제로 얼마나 많은 유령패키지들이 설치된 걸까? pnpm으로 다시 install을 해보자.

pnpm을 사용할때의 node_modules

pnpm install을 하면 설치된 패키지가 684개이다. pnpm 으로 설치된 패키지 개수가 npm으로 설치된 패키지 개수 보다 약 80개 정도 적은 것을 확인 할 수 있다. pnpm Install 할때의 노드모듈

npm install 했을때 사용 가능하던 패키지들이 pnpm install 했을때는 사용불가하다. pnpm install 헀을떄 노드모듈

npm을 사용할때는 package.json에 명시되지 않은 패키지들도 설치되었던 반면, pnpm을 사용하면서는 package.json에 명시된 패키지들만 설치되기 때문이다.

정리

위에서 npm install과 pnpm install을 비교하며 유령의존성을 직접 확인해보았다.

npm install을 했을때는 패키지가 764개 설치되었고 pnpm install 했을때는 패키지가 684개 설치되었다.
약 80개정도가 package.json에 명시되지 않은 패키지였다.

이 유령의존성은 배포때도 더 많은 패키지들을 설치하면서 더 많은 시간을 소모하게 되고, 성능최적화때에 js 번들 관리를 어렵게 한다.

때문에 npm보다는 유령의존성이 없는 pnpm, yarn을 사용하는 것이 좋을 것 같다.