Node Package Manager.
npm is the world's largest software registry.
npm
은 Node를 사용하는데 필요한 다양한 package들을 관리하는 틀이다.
위의 사이트에서 다양한 패키지들이 존재하는 것을 알 수 있다.
공식 문서에 따르면 package.json
은 다음과 같다.
package.json
은 다양한 fields로 구성된다.
name : 이 package의 이름을 나타낸다.
version : x.x.x 형태의 semantic versioning guideline을 따르는 형태이어야 한다.
author : 배포한 사람의 email을 주로 쓴다.
descriptioin : package의 설명을 적을 수 있다.
main : package의 진입점이 되는 모듈의 ID를 나타낸다.
require("food")
를 통해 모듈을 import하면 "main"에 지정된 모듈의 export 객체를 가져온다.scripts : 자주 사용하는 command의 alias를 지정할 수 있다.
keyword : package의 설명 키워드를 문자열 배열로 적는다.
license : 패키지를 사용하는데 권한과 제약사항을 명시한다.
dependencies/devDependencies : package가 의존하고 있는 외부 라이브러리들을 관리한다. devDependencies는 개발시에만 필요하고 배포시에는 필요없는 패키지를 포함시킨다.
package.json
은 버전정보를 적을 때 보통 정확한 버전을 적기 보다는 version range
를 사용한다. 따라서 여러 개발자가 동시에 개발하거나 package를 불러와서 작업 할 때, 버전정보가 맞지 않아 오류가 발생할 수 있다.
이를 해결하기 위해 생겨난 것이 package-lock.json
이다. package-lock.json
에는 버전 정보가 정확히 적혀있다.
정리하자면 package.json
에서는 version range
를 사용해서 패키지의 버전 수정마다 일일이 package.json
을 수정해야 하는 번거로움을 없애고, node_modules
트리 또는 package.json
이 수정될 때, 자동으로 생성되는 package-lock.json
을 통해 정확한 버전관리를 가능하게 한다.