npm
우리에게 흔히 알려진 패키지 매니저로 npm, yarn, pnpm 등이 있다. 각각의 특징과 장단점을 사용경험에 비추어 정리해보려한다. npm을 시작으로 하나씩 다뤄보자.
npm?
npm은 node package manager의 약자로, Node.js 에 내장되어 자동으로 설치되는 패키지 매니저이다. 여기서 말하는 패키지란, Node.js 환경에서 사용이 가능한 모듈/라이브러리들을 의미한다. 즉, Node.js 환경에서 사용가능한 라이브러리들을 다운받을수 있게 하는 도구
를 우리는 패키지 매니저라고 부른다. (앱스토어와 유사하다.)
주로 npm install [라이브러리]
의 명령어로 라이브러리를 설치하며, 설치된 라이브러리들은 ./node_modules
에 설치된다. 그런데 우리가 npm으로 설치해 사용하는 라이브러리들은 빈번하게 업데이트가 이루어진다. 그렇다면 업데이트가 될때마다 변경점에 맞추어 프로젝트를 수정해야하나? 물론 그럴수 있겠지만, 보통 어떠한 파일을 통해 설치된 라이브러리들의 버전을 명시하여 관리하게 되고, 이 파일이 바로 package.json
이다.
package.json
우리에게 익숙한 package.json 파일이다. 이 파일을 통해 프로젝트의 정보와 사용되는 라이브러리, 라이브러리들의 버전 등 패키지 의존성을 관리한다. 프로젝트를 클론하거나 테스트해볼때도 이 파일을 바탕으로 의존성을 설치해 실행하게 된다.
여기서 눈여겨볼점은 dependencies
와 devDependencies
가 나뉘어져 있다는 점이다. 개발의존성과 그냥 의존성을 분리해놓은 이유는, dependencies
에 명시된 라이브러리들은 배포 시에 포함되지만, devDependencies
에 명시된 라이브러리들은 말 그대로 개발 의존성이기 때문에 배포할때 포함되지 않는다. 이를 통해 보다 빠른 빌드시간을 가질수 있고, 배포시 불필요한 의존성을 설치하지 않을수 있다.
Why npm?
직접 npm을 사용해본 경험을 비춰보아, npm의 가장 큰 장점은 간편함 인것 같다. Node.js에 내장되어 있어 추가적인 설치가 필요없다. 물론 다른 패키지 매니저들의 설치/사용이 어려운것은 아니지만, 신경써야 할 부분이 하나 줄어든다는 것을 무시하지 못할 것 같다.
그럼 npm만 사용하면 되는것 아닌가? 라는 생각이 들겠지만, 장점이 있으면 단점도 분명히 있는 법.
대표적인 단점으로는 패키지 수가 많아질수록 node_modules
폴더의 크기가 커져 빌드 시간이 크게 증가한다는 점이다. 또한, 서로 다른 패키지가 동일한 의존성을 서로 다른 버전으로 요구할 경우, 기존 node_modules
내부에 새로운 node_modules
폴더가 생성되어 트리 구조가 복잡해지고, 설치 시간과 폴더 크기가 더욱 늘어나는 의존성 문제가 발생한다.
Last updated