node, npm, package.json, package-lock.json

이민재·2022년 6월 21일
0

node

목록 보기
1/1

node 버전을 변경하며 다른 파일들을 실행시킬 때 npm install 전, 큰 고민 없이
node_modules와 package-lock.json을 삭제하고 npm을 install 하고 있었다.
node, npm, node_modules, package.json, package-lock.json을 정확하게 이해하고 있지 않아서 이에 대한 정리이다.

npm

node pacakage manager, 모듈을 관리하기 위한 매니저
여기서 node는 서버의 의미보다는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있게 하는 환경인 자바스크립트 런타임을 의미한다.

  • npm에 업로드된 노드 모듈을 패키지라고 부른다.
  • 모듈이 다른 모듈을 사용할 수 있는 것처럼, 어떤 패키지가 다른 패키지를 사용할 수 있다. 이런 관계를 dependencies(의존 관계)라고 한다.

package.json

생성한 프로젝트의 메타정보와 이 프로젝트가 의존하고 있는 모듈들에 대한 정보들을 JSON 형태로 모아놓은 파일.

여러 곳에서 새로운 프로젝트를 시작할 때, 필요한 모듈들이 많다면 매번 같은 모듈들을 찾아 npm 명령으로 설치해야 하고 설치한 모듈들에 대한 버전관리도 해야하므로 이를 관리하는 파일이라고 생각하면 되겠다.

node_modules

package.json이 의존하고 있는 모듈들에 대한 정보들의 파일이라면,
npm 설치 후, 모듈 전부를 포함하고 있는 곳이 바로 node_modules 디렉토리이다.
그래서, npm으로 새로운 모듈을 설치하게 되면 package.json과 node_modules가 추가된다.

  • git에 커밋할 때 node_modules를 제외해도 된다. 왜냐하면 package.json 패키지 기록을 바탕으로 npm i 를 통해 node_modules를 언제든 설치할 수 있기 때문이다.
    (node_modules 디렉토리에는 정말 많은 모듈들이 들어가있기 때문에 용량이 큼...)

package-lock.json

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을 사용한다.

  • 이러한 오류를 방지하기 위해서 git에 커밋할 때, pacakge.json과 함께 반드시 package-lock.json도 함께 커밋할 것!

npm install

npm install 기능의 동작을 두 가지로 보면,

  • 모듈명을 명시하여 설치한다.
    - ex.) npm install react
    • 모듈명인 'react'를 명시하여 모듈을 설치
  • 모듈명을 명시하지 않고 package.json dependencies에 의존하여 설치한다.
    - ex.) npm install

[참고]
https://cheonmro.github.io/2018/12/23/package-json/

profile
스스로 기억하기 위해서, 기록해요

0개의 댓글