[node js] npm? package.json? package-lock.json? node_modules?
npm이란?
npm은 Node Package Manager의 약어다. 파이썬에서 라이브러리와 패키지를 관리하기 위해 사용되는 pip와 동일하다고 생각하면 된다.
npm 특징
- 프로젝트(디렉토리) 단위로 설치된다
파이썬의 pip의 경우 전역 환경이나 가상환경에 패키지가 설치된다. 하지만 npm은 패키지를 설치할 때 해당 프로젝트(디렉토리)에 설치된다. 즉, 하나의 프로젝트에서 패키지 설치 후 다른 프로젝트로 이동하게 되면 전 프로젝트에서 설치했던 패키지는 사용할 수 없다. 해당 패키지를 사용하기 위해서는 다시 한 번 패키지 다운로드를 진행해야 한다.
만약 패키지를 전역으로 사용하고 싶다면 ‘-g’옵션을 사용하면 된다.
- package.json 파일을 통해 메타데이터, 의존성을 관리한다
파이썬의 경우 requirements.txt를 이용해 보통 메타데이터와 의존성을 관리한다. Node.js의 경우 package.json이라는 파일을 통해 메타데이터와 의존성을 관리한다.
npm init이란?
말 그대로 npm을 시작하겠다는 의미. 새로운 Node.js 프로젝트를 설정할 때 사용되는 명령어로, 해당 명령어를 통해 package.json 파일이 생성된다.
package.json VS package-lock.json
Node.js를 이용해 개발을 진행하다보면 어느샌가 package.json이라는 파일과 package-lock.json이라는 파일이 생긴 모습을 확인할 수 있다. 이때 두 파일은 무엇이며 차이는 무엇일까?
package.json
프로젝트의 주요 메타데이터와 패키지 의존성을 선언하는 파일
package-lock.json
package.json에 선언된 의존성을 실제 설치된 버전 및 트리 구조로 고정하여 기록하는 파일
요약
package.json 파일은 프로젝트의 전반적인 설정과 의존성을 정의하는 반면, package-lock.json 파일은 의존성 트리를 고정하여 재현 가능한 빌드를 보장한다. 두 개 동시에 사용되며 프로젝트의 일관성과 안정성을 유지하는 목적으로 쓰임
node_modeuls?
node_modules는 npm을 통해 설치된 패키지와 라이브러리가 저장되는 공간이다. 위에서 npm의 특징으로 ‘프로젝트(디렉토리) 단위로 설치된다’라고 설명했다. 이 때 프로젝트 하위에 패키지가 설치되는 폴더명이 바로 ‘node_modules’. 해당 폴더에 패키지를 저장하면 이미 설치된 패키지의 중복 다운로드를 피할 수 있고, 일관된 버전의 패키지를 사용할 수 있으므로 프로젝트의 일관성과 안정성을 보장할 수 있다.