node 버전을 변경하며 다른 파일들을 실행시킬 때 npm install 전, 큰 고민 없이
node_modules와 package-lock.json을 삭제하고 npm을 install 하고 있었다.
node, npm, node_modules, package.json, package-lock.json을 정확하게 이해하고 있지 않아서 이에 대한 정리이다.
node pacakage manager, 모듈을 관리하기 위한 매니저
여기서 node는 서버의 의미보다는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있게 하는 환경인 자바스크립트 런타임을 의미한다.
생성한 프로젝트의 메타정보와 이 프로젝트가 의존하고 있는 모듈들에 대한 정보들을 JSON 형태로 모아놓은 파일.
여러 곳에서 새로운 프로젝트를 시작할 때, 필요한 모듈들이 많다면 매번 같은 모듈들을 찾아 npm 명령으로 설치해야 하고 설치한 모듈들에 대한 버전관리도 해야하므로 이를 관리하는 파일이라고 생각하면 되겠다.
package.json이 의존하고 있는 모듈들에 대한 정보들의 파일이라면,
npm 설치 후, 모듈 전부를 포함하고 있는 곳이 바로 node_modules 디렉토리이다.
그래서, npm으로 새로운 모듈을 설치하게 되면 package.json과 node_modules가 추가된다.
package-lock.json은 생성되는 시점의 의존성 트리(node_modules)에 대한 정보를 가지고 있는 파일을 말한다.
결국, package-lock.json도 모든 모듈을 가지고 있다.
따라서 npm을 이용해서 node_modules나 package.json을 수정하게 되면 package-lock.json도 자동으로 업데이트가 된다.
package.json 파일에는 의존성 모듈(dependencies)의 version range가 사용된다.
version range란, 특정 버전이 아닌 버전의 범위를 의미한다.
따라서, package.json을 보고 npm install을 하면 시점에 따라서 최신의 업데이트가 진행되어 버전이 변경된 경우에는 node_modules의 모듈 버전과 충돌이 일어나 오류를 발생시키다. 이 문제를 해결하기 위해 package-lock.json을 사용한다.
npm install 기능의 동작을 두 가지로 보면,