package.json과 package.lock.json, npm i와 ci 는 뭘까?

권태형·2023년 2월 27일
0

지식정리

목록 보기
7/72

npm init -y를 통해 이니셜라이즈를 하게되면 package.json파일이 생성되고, 이후 다른 npm을 통한 라이브러리 설치시 package.lock.json파일 생성과 더불어 package.json파일이 업데이트 된다.

우리가 직접만들지 않은 이 두파일은 무엇일까??

package.json과 package.lock.json은 뭘까?

두 파일 모두 node.js 프로젝트에서 중요정보를 담고있는 파일이다.

package.json

이 파일은 프로젝트의 정보, 의존성 패키지 정보, 스크립트 명령어 등을 포함하는 메타데이터 파일이다.

package.json 파일이 담고 있는 정보는 아래와 같다.

name: 프로젝트 이름
version: 프로젝트 버전
dependencies: 프로젝트가 의존하는 패키지들의 목록
devDependencies: 개발 환경에서만 필요한 패키지들의 목록
scripts: 프로젝트에서 사용할 수 있는 스크립트 명령어들의 목록

우리가 자주 접해서 보면 npm을 통한 패키지들의 이름과 버전항목이 주로 많이 들어있는 것을 알 수 있다.

package.lock.json

이 파일은 package.json의 의존성 패키지들을 잠금(lock)하는 파일이다. 즉, 이 파일은 의존성 패키지들의 정확한 버전과 의존성 관계를 나타낸다.
npm이 패키지들을 설치할 때 사용되며, 이전에 사용된 버전을 재사용하여 설치를 빠르게 수행할 수 있다.

주목해야할 점은 이전에 사용된 버전을 재사용할 수 있도록 도와준다는 것이다.

package.json파일에서 직접 보면 라이브러리의 이름과 버젼 정보만 나와있지만, lock.json파일은 훨씬 많고 방대한 정보를 가지고 있다.
직접 파일을 열어 보아도 수천줄~수만줄의 길이를 가진 파일을 볼 수 있고, 주로 현재 프로젝트에 설치된 패키지들의 정보를 담고있다.

package.lock.json 파일이 담고 있는 정보는 아래와 같다.

name: 패키지 이름
version: 패키지 버전
lockfileVersion: 파일 형식 버전
dependencies: 모든 의존성 패키지의 이름, 버전, 다운로드 URL 및 SHA-1 해시 등의 정보를 포함하는 객체

두 파일의 필요성

간단하게 생각하면 내가 or 다른 개발자가 Git에 올라온 프로젝트를 복제하고 nodemodules를 받을 때 참고 되어야할 사항이 이 파일들에 남겨져 있기 때문에
같은 프로젝트를 다른환경에서 추가적인 작업을 하기 위한 포석이라고 볼 수도 있을 것이라 생각한다.

npm i와 ci 는 뭘까?

위에 언급한 두 파일과 가장 연관된 명령어이다.

우리가 보통 처음 프로젝트를 만들면서 진행할 때에는 npm i명령어를 사용하고 이후 이루어지는 복제나 배포환경에서의 통합에서 npm ci를 사용한다.

두 명령어에 대해서 자세히 알아보자.

npm i와 npm ci

npm i는 npm install의 축약형으로, package.json 파일에서 의존성 패키지 정보를 읽어들여 패키지를 설치한다. npm i 명령어를 실행할 때마다, package.json 파일에서 최신 버전의 패키지를 찾아 설치하게 된다.

npm ci는 npm clean-install의 축약형으로, package-lock.json 파일을 사용하여 의존성 패키지를 설치합니다. npm ci 명령어는 npm i와 달리, 항상 package-lock.json 파일에서 패키지 버전을 읽어들여 설치한다. 따라서 npm ci를 사용하면 정확한 패키지 버전을 사용하여 의존성 패키지를 설치할 수 있다.

정리

npm i는 개발 및 테스트 환경에서 사용되는 명령어이며 package.json 파일에서 패키지 정보를 가져와 최신 버전을 설치하는 반면, npm ci는 프로덕션 환경에서 사용되는 명령어이며, npm ci는 항상 package-lock.json 파일을 사용하여 정확한 버전을 사용하여 패키지를 설치할 수 있다.

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

0개의 댓글