[node.js] npm과 yarn과 package.json과 package-lock.json

·2023년 1월 30일
0

개발 기록

목록 보기
50/68

npm

node.js의 패키지 관리자이다. 개발자들이 만든 패키지를 npm 저장소에 올리면 패키지 관리자를 통해 설치, 삭제, 패키지 버전 관리, 의존성 관리가 가능하다.

yarn

페이스북이 만든 패키지 관리자이다. npm 저장소를 동일하게 사용하지만 npm보다 속도나 안정성 측면이 향상되었다.

npm vs yarn

속도

  • npm은 패키지를 한 번에 하나씩 순차적으로 설치한다.
  • yarn은 중복된 데이터는 다운로드하지 않고, 패키지를 병렬로 설치하도록 최적화되어있어 설치 속도가 더 빠르다.
  • 하지만 버전이 업 되면서 npm이 빨라져 이젠 큰 차이가 없다.
  • npm은 자동으로 패키지에 포함된 다른 패키지 코드를 실행한다. 이는 안정성을 위협할 수 있다.
  • yarn은 yarn.lock 또는 package.json 파일에 있는 파일만 설치한다. yarn.lock에 명시된 패키지만 설치하기 때문에 버전의 차이로 인한 버그를 방지해 줄 수 있다.
  • 현재는 npm의 보안도 크게 향상되었다.

그럼 현재는 둘 중 뭘 쓰는 게 더 좋다는 없는 건가? yarn을 안 써봐서 모르겠다. npm을 쓰다 버전 문제가 생기면 yarn을 찾게 되지 않을까.

package.json

프로젝트 정보와 의존성을 관리하는 문서이다. 프로젝트가 어떤 패키지를 사용하는지, 어떤 버전을 사용하는지 등을 기록함으로써 어디서나 동일한 개발 환경을 구축할 수 있게 해준다.

dependencies

  • 운영 시에 필요한 의존 패키지

devDependencies

  • 개발 시에만 필요한 의존 패키지
  • ex) 테스트를 위한 패키지, 트랜스파일러 등 배포 시에는 필요 없는 패키지

프로젝트를 배포하고 운영 환경에서 그 프로젝트를 가져와 의존성을 설치해 빌드 하는 경우 개발할 때 필요한 패키지는 더 이상 필요 없다. 이럴 때 dependenciesdevDependencies로 분리되어 의존성이 관리되고 있다면 운영 환경에서는 dependencies에 속한 패키지들만 설치하면 된다.

package-lock.json

package.json 파일에 등록된 패키지 버전은 범위로 지정된 경우가 많다. (^, ~ 기호가 적힌 경우가 그럼)
이럴 경우 package.json 파일만 사용하면 패키지가 정확히 하나의 버전을 사용하지 않고 npm i를 하는 그 순간의 최신 버전을 설치하게 된다.

협업을 한다고 생각해 보자 그럼 너도 나도 npm i를 할 일이 생길 텐데 팀원들마다 다른 버전을 다운받게 될지도 모르는 일이다. 버전 때문에 버그가 날 수도 있고, 어디서나 동일한 개발 환경을 구축할 수 없게 된다.
yarn에서 먼저 yarn.lock파일을 만들고 npm에서 package-lock.json을 지원하게 됐다고 한다.

package-lock.json파일이 있다면 정확히 명시된 버전으로 패키지를 설치해 주기 때문에 항상 동일한 버전의 패키지가 설치되는 것을 보장받을 수 있다. 그러니 push를 잊지 말자.

참고자료

0개의 댓글