npm(Node Package Manager)
- Node의 라이브러리를 손쉽게 설치 및 관리 가능하게 해주는 패키지 관리자
- npm 레지스트리라는 Node의 라이브러리들이 공개적으로 저장되고 관리되는 중앙 저장소에서 사용자가 라이브러리 install 요청 시 해당 저장소에 존재하는 라이브러리를 다운받는다.(패키지 검색 -> 패키지 설치 -> 패키지 실행 -> 설치 된 패키지 유지)
- 다운받은 라이브러리들은 node_modules라는 폴더에 저장되며 package.json 파일을 통해 version과 dependency를 관리한다.
- 간혹 package.json에서 version이 ~(Tilde)나 ^(Caret)와 같이 범위로 주어지는 경우 사용자마다 버전 차이가 발생 할 수 있지만 package-lock.json 파일을 통해 npm install을 실행한 시점의 dependency tree를 package-lock.json에기록하여 해당 문제를 방지할 수 있다.
npx(Node Package eXecute)
- npm의 5.2.0버전부터 새로 추가된 라이브러리이다, 즉 새로운 패키지 관리자가 아닌 npm을 좀 더 편하게 지원하기 위한 라이브러리이다.
- 기존의 npm install {lib_name} -g command로 설치 할 때 시 모든 프로젝트가 같은 version의 라이브러리를 사용한다.
특정 프로젝트만 다른 version의 라이브러리를 사용하거나 라이브러리가 update 될 경우 불편함이 존재한다.
- npx는 패키지 실행 라이브러리로 중앙 저장소에서 패키지를 찾아 일시적으로 설치하고 실행한 후, 실행한 패키지는 삭제한다(패키지 검색 -> 패키지 설치 -> 패키지 실행 -> 설치 된 패키지 삭제)
PS : package.json의 ~, ^ 차이
~(Tilde)
명시된 버전의 마지막 자리 안의 범위에서만 자동으로 업데이트 한다.
ex)
~0.0.1 : 0.0.1<= MyPackagVersion <0.1.0
~0.1.1 : 0.1.1<= MyPackagVersion <0.2.0
~0.1 : 0.1.0<= MyPackagVersion <0.2.0
^(Caret)
Caret는 라이브러리들이 SemVer 따른다는 전제 하에 만들었으며 버전 번호는 아래와 같다.
- MAJOR : 하위 호환성이 깨지며 새로운 버전에서는 이전 버전의 코드가 작동하지 않음
EX) 1.0.0 => 2.0.0
- MINOR : 하위 호환성을 유지하며 새로운 기능을 추가, 이전 버전의 코드가 작동
EX) 1.0.0 => 1.1.0
- PATCH : 하위 호환성을 유지하며 버그 수정, 이전 버전의 코드가 작동
EX) 1.0.0 => 1.0.1
Caret는 하위 호환성을 지키기 위해 MAJOR 범위의 버전을 업데이트를 진행하는것이 아닌 MINOR, PATCH 범위의 버전을 업데이트 한다.
- ^1.0.2 => 1.0.2<= MyPackagVersion <2.0.0
- ^1.0 => 1.0.0<= MyPackagVersion <2.0.0
- ^1 => 1.0.0<= MyPackagVersion <2.0.0