5-1. package.json
npm이란
: Node Package Manager
- 다른 사람들이 만든 소스 코드들을 모아둔 저장소
- 이미 있는 기능을 다시 구현할 필요가 없어 효율적
- 패키지 : npm에 업로드된 노드 모듈
- 모듈이 다른 모듈을 사용할 수 있듯 패키지도 다른 패키지를 사용할 수 있음
- 의존 관계라고 부름
package.json
: 현재 프로젝트에 대한 정보와 사용 중인 패키지에 대한 정보를 담은 파일
- 같은 패키지라도 버전별로 기능 다를 수 있음
-> 버전 기록 필요
- 동일한 버전 설치하지 않으면 문제 생길 수 있음
- 노드 시작 전 package.json부터 만들고 시작(npm init 명령어 사용)
package.json 속성

npm 스크립트
- scripts : 터미널에 치는 명령어들의 별명
- scripts 안에 test
=> npm run test 명령어 사용 : exit 1을 발생시키며 종료
- scripts 안에 start
=> npm run start : 시작(start 사용 시 run은 생략가능)
패키지 설치하기
- express 설치 - 콘솔창에 명령어 입력
=> dependencies에 express가 추가됨
npm i express
- 패키지는 한 번에 여러 개를 추가해 줄 수 있다
npm i {package1} {package2}
- devDependencies : 개발용으로만 사용하는 패키지
=> 명령어에 -D를 추가하면 devDependencies에 패키지를 추가할 수 있다
npm i -D nodemon
5-2. node_modules와 npx, SemVer
node_modules는 용량 많이 차지 - 배포시엔 삭제

배포 후 npm i 명령어를 사용해서 다시 설치한다(npm i가 불가능한 폐쇄망에서는 삭제x)
rimraf 패키지 전역 설치
npm i -g rimraf
- -g : 전역 설치 -> dependencies에 표시 x
=> 이 경우에는 rimraf라는 명령어가 생성
rimraf node_modules
: node_modules 폴더를 삭제
최근에는 global 설치 기피
설치 여부를 알수 없음
-> -D를 사용한 개발용으로 설치 혹은 그냥 설치
npm i rimraf -D
이후 글로벌 명령어로 사용 -> npx 사용
npx rimraf node_modules -> node_modules 삭제
package-lock.json
정확한 버전 기록용
SemVer 버저닝 방식
- 노드 패키지의 버전은 SemVer(유의적 버저닝) 방식을 따름
- 숫자 3자리 형식
- Major(주 버전), Minor(부 버전), Patch(수 버전)

- Major : 하위 버전과 호환되지 않은 수정 사항이 생겼을 때 올림
- Minor : 하위 버전과 호환되는 수정 사항이 생겼을 때 올림
- Patch :기능에 버그를 해결했을 때 올림
버전 기호 사용
- ^1.1.1 : 패키지 업데이트 시 minor 버전까지만 업데이트(2.0.0 버전은 안됨)
=> 첫 번째 자리만 1이어야 한다는 뜻(minor, patch 자리는 신경x)
- ~1.1.1 : 패키지 업데이트 시 patch 버전까지만 업데이트(1.2.0 버전은 안됨)
=> 두 번째 자리만 1이어야 한다는 뜻(patch 자리는 신경x)
-> ~는 잘 사용하지 않는다.
- 이상, 이하, 초과, 미만 표기 기능(>=, <=, >, <)
- @latest : 최신
- @next : 가장 최신 배포판 사용 가능(불안정함)
- 알파/베타/RC 버전 존재할 수도
ex) 1.1.1-alpha.0
2.0.0-beta.1
2.0.0-rc.0
5-3. npm 명령어들 알아보기
npm 명령어 문서로 이동하면 다양한 명령어들을 살펴볼 수 있다.
많이 쓰는 npm 명령어

- npm adduser로 npm계정을 등록할 수 있다.

5-4. npm 배포하기
서버 배포
index.js를 배포하고자 하려면 index.js와 package.json이 있는 위치에서 명령어 npm publish를 사용해야 한다.

403에러 발생
1. npm 계정 이메일 계정 미인증
=> 인증해 주면 된다
2. package.json에 있는 name이 기존 서버와 겹침
=> package명을 변경해 주면 된다.

서버 배포 취소
서버를 없애는 경우에는 서버 생성 72시간 전에 unpublish 명령어를 사용해 주면 된다.
npm unpublish --force { 서버 name }