node.js의 패키지 관리자이다. 개발자들이 만든 패키지를 npm 저장소에 올리면 패키지 관리자를 통해 설치, 삭제, 패키지 버전 관리, 의존성 관리
가 가능하다.
페이스북이 만든 패키지 관리자이다. npm 저장소를 동일하게 사용하지만 npm보다 속도나 안정성 측면이 향상되었다.
그럼 현재는 둘 중 뭘 쓰는 게 더 좋다는 없는 건가? yarn을 안 써봐서 모르겠다. npm을 쓰다 버전 문제가 생기면 yarn을 찾게 되지 않을까.
프로젝트 정보와 의존성을 관리하는 문서이다. 프로젝트가 어떤 패키지를 사용하는지, 어떤 버전을 사용하는지 등을 기록함으로써 어디서나 동일한 개발 환경을 구축할 수 있게 해준다.
프로젝트를 배포하고 운영 환경에서 그 프로젝트를 가져와 의존성을 설치해 빌드 하는 경우 개발할 때 필요한 패키지는 더 이상 필요 없다. 이럴 때 dependencies
와 devDependencies
로 분리되어 의존성이 관리되고 있다면 운영 환경에서는 dependencies
에 속한 패키지들만 설치하면 된다.
package.json 파일에 등록된 패키지 버전은 범위로 지정된 경우가 많다. (^, ~ 기호가 적힌 경우가 그럼)
이럴 경우 package.json 파일만 사용하면 패키지가 정확히 하나의 버전을 사용하지 않고 npm i
를 하는 그 순간의 최신 버전을 설치하게 된다.
협업을 한다고 생각해 보자 그럼 너도 나도 npm i
를 할 일이 생길 텐데 팀원들마다 다른 버전을 다운받게 될지도 모르는 일이다. 버전 때문에 버그가 날 수도 있고, 어디서나 동일한 개발 환경을 구축할 수 없게 된다.
yarn에서 먼저 yarn.lock
파일을 만들고 npm에서 package-lock.json
을 지원하게 됐다고 한다.
package-lock.json
파일이 있다면 정확히 명시된 버전으로 패키지를 설치해 주기 때문에 항상 동일한 버전의 패키지가 설치되는 것을 보장받을 수 있다. 그러니 push를 잊지 말자.