package.json 과 package.lock.json 의 차이점

버건디·2022년 12월 8일
0

Node.js

목록 보기
3/15
post-thumbnail

🔍 package.json 이란?

노드를 실행하고 처음에 npm init 을 하면 , package.json 파일이 생성 된다.

npm 공식문서에서는 package.json 을

  1. 자신의 프로젝트가 의존하는 패키지의 리스트

  2. 자신의 프로젝트 버전을 명시

  3. 다른 환경에서도 빌드를 재생 가능하게 만들어서, 다른 개발자들 또한 쉽게 사용할 수 있도록 한다.

라고 되어있다.

즉 package.json는 앞서 빌드할 프로젝트의 기본적인 정보들과, 사용할 패키지들의 버전을 적어놓는 명세서 라고 생각하면 된다.

{
  "name": "nodestudy", // 프로젝트 이름
  "version": "1.0.0", // 프로젝트 버전 입력
  "description": "", // 프로젝트에 대한 설명 
  "main": "server.js", // 자바스크립트 실행 파일 진입점
  "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1"
  }, // 코드를 테스트 할때 입력할 명령어 ex) npm start
  "author": "BRGNDY", // 패키지 만든 사람
  "license": "ISC", // 패키지 라이선스
  "dependencies": {
    "express": "^4.18.2" // 설치 된 패키지들 버전 명시
  }
}

그리고 dependencies는 devDependencies 라는 개발용 패키지를 따로 설치할 수도 있다.

devDependencies 는 실제 배포시에는 사용되지 않고 개발 중에만 사용되는 패키지들이다.

일반 패키지 설치

npm install <package>

개발용 패키지 설치

npm install --save-dev <package>

실 예로 nodemon 패키지는 서버를 실행한 후 코드가 변경 되고 새로 저장 될때마다 서버를 자동으로 재시작 시켜주는 패키지인데, 이 패키지는 개발할때만 필요하고 실제 배포시에는 사용되지 않는다.

dependencies 와 devDependencies 가 따로 설치 된 것을 확인할 수 있다.


🔍 package-lock.json 이란?

package.json 에서 패키지들의 버전을 명시할때, 정확한 버전을 명시하기보다 range version 을 사용한다.

예를들어 저 위의 express 가 "^4.18.2" 로 버전이 명시되어있는데, 저것은 정확히 4.18.2라는 버전이라는 것이 아닌 4.19 미만의 패키지 버전을 사용하겠다는 뜻이다.

협업을 하다가 서로 패키지의 버전이 맞지 않아서 오류가 나거나, 패키지가 업데이트 됐을때 동일한 파일로 npm install 을 해도 기존에 있던 버전이 아닌 새로 업데이트 된 버전으로 패키지가 설치되어서 오류가 발생할 수 있다.

이럴때 package-lock-json 을 사용함으로써 패키지의 의존성을 높인다.


package-lock.json 없이 package.json 자체에서 버전을 정확하게 명시할수도 있겠지만,

해당 패키지 버전의 버그가 수정 되어서 업데이트 될때마다, 해당 프로젝트의 패키지 버전 또한 일일히 업데이트를 해주어야 하기 때문에, package-lock-json 을 사용해서 의존성을 높인다.

그렇기때문에 package-lock.json 은 package.json 과 동시에 설치되는 것이 아니라, node-modules 트리가 수정되거나 package.json 의 내용이 변경될때 생성된다 .

간단히 정리하자면 package-lock.json 은 package.json 의 패키지 버전 명시를 도와주는 파일인 것이다.

profile
https://brgndy.me/ 로 옮기는 중입니다 :)

0개의 댓글