npm은 Node Package Manager의 약자이며 대부분의 JavaScript 프로그램은 npm에 패키지로 등록됩니다.
java에 gradle , php의 composer, python의 pip와 같은 역할을 합니다.
npm의 대안으로는 facebook의 yarn이 있습니다.
node.js를 설치하면 내장(built in)되어 있습니다.
npm -v를 통해 버전을 확인할 수 있습니다.
npm install 명령으로 외부 모듈 패키지를 설치합니다.
npm install에서 -g 옵션을 통해 글로벌로 설치할 수 있습니다.
글로벌 설치는 권장 되지 않으면 npx를 통해 글로벌로 설치하지 않고 사용하는 방법도 있습니다. npx의 경우 프로젝트 내의 패키지 설치 여부를 확인하고 없으면 글로벌 내의 패키지 여부를 확인하고 없으면 다운로드 받은 후 설치 되고 나서 사라집니다.
npm으로 패키지 설치가 완료된 경우 [프로젝트경로][node_modules][패키지명]으로 모듈 패키지가 설치됩니다.
모듈이 필요 없어져서 삭제하는경우 npm uninstall 명령으로 삭제할 수 있습니다.
npm update을 통해 모듈 업데이트 할 수 있습니다.
package.json
프로젝트 npm inatall로 외부 모듈 설치시 문제점이 있습니다. 프로젝트 경로에서 npm install을 이용하여 패키지를 설치하는 경우 해당 프로젝트 이에외는 사용할 수 없다는 문제점이 있습니다. 만약 여러 프로젝트에서 동일한 외부 모듈을 사용하는 경우 각각의 프로젝트마다 npm install을 해주어야 하는 번거로움이 생기게 됩니다. 이러한 문제를 해결하기 위한 방법으로는 외부모듈이 설치되는 node_modules 디렉터리를 프로젝트들의 상위 디렉터리로 옮기는 방법이 있습니다. node.js는 프로젝트가 실행될 때 필요한 모듈이 현재 프로젝트의 node_modules 디렉터리에 존재하는지 확인 후 없으면 상위 디렉터리의 node_modules 안에 디렉터리가 있는지 검사하기 때문입니다. 만약 상위에도 존재하지 않는 경우 더 상위 디렉터리의 node_modules을 검사하는식으로 동작합니다.
필요한 패키지들의 목록을 파일로 정리해놓고 목록 파일을 이용하여 단 한번의 명령어로 필요한 패키지들을 모두 설치할 수 있습니다. 이러한 패키지 정의 파일을 package.json 파일이라고 합니다. npm init 명령어를 통해 생성 할 수 있습니다.
동일한 패키지는 버전에 따라 다른 기능을 가질 수 있습니다. package.json파일은 설치된 모든 패키지를 기록합니다
npm ci는 package-lock.json 등의 lockfile을 기준으로 package를 설치하게 되어 있으므로, 규모가 큰 조직에서 package에 대한 lockfile이 승인되면, npm ci를 활용하여 package-lock.json에 명시되어 있는 패키지를 설치하도록 합니다.
npm@5 부터 더욱 안정적이고 성능이 좋아졌습니다.
라이센스
ISC, MIT, BSD 라이센스 : 모듈 및 라이센스를 인정할 때 무료로 사용 가능하빈다.
Apache : 사용은 자유롭지만 특허권 제한이 있습니다.
GPL : 배포 할 때 소스 코드를 공개하고 GPL 라이센스까지 배포해야합니다.
package.json의 script 속성
npm run 명령어를 통해 package.json에 있는 script 명령어를 실행 할 수 있습니다.
’— save-dev’ option
--save-dev로 개발 전용 패키지를 위한 옵션, 즉 nodemon소스 코드가 변경 될 때마다 핫 로딩을 제공하며 종종 개발용으로 만 사용됩니다.
--save-dev는 -D로 축약 될 수 있습니다.
패키지 버전
첫 번째 숫자
주요 버전
0은 개발 버전을 나타냅니다. 1부터 공식 버전입니다.
주요 버전은 하위 버전 호환하지 않습니다. 즉, 1에서 2로 업그레이드 할 경우 오류가 발생할 수 있습니다.
두 번째 숫자
부 버전
하위 버전은 호환 가능합니다.
세 번째 숫자
패치 버전
업그레이드 및 기존의 오류를 수정합니다.
^
부 버전으로 설치 / 업데이트 합니다.
부 버전 업데이트가 하위 버전과 호환되는 최신의 버전으로 업데이트 되기 때문에 유용합니다.