5.1 npm 알아보기
5.1.1 npm 이란
Node Package Manager
=> 노드의 패키지 매니저
=> 다른 사람들이 만든 소스 코드들을 모아둔 장소 (남의 코드를 사용하여 프로그래밍 가능)
=> 이미 있는 기능을 다시 구현할 필요가 없어 효율적
=> 오픈 소스 생태계를 구성중
패키지 : npm에 업로드 된 노드 모듈
=> 모듈이 다른 모듈을 사용할 수 있듯이 패키지도 다른 패키지를 사용할 수 있음 (의존 관계)
5.2 package.json으로 패키지 관리하기
5.2.1 package.json
현재 프로젝트에 대한 정보와 사용 중인 패키지에 대한 정보를 담은 파일
=> 같은 패키지라도 버전별로 기능이 다를 수 있으므로 버전을 기록해두어야 함
=> 동일한 버전을 설치하지 않으면 문제가 생길 수 있음
=> 노드 프로젝트 시작 전 package.json부터 만들고 시작함 (npm init)
5.2.2 package.json 속성들
package name | 패키지의 이름 package.json의 name 속성에 저장됨 |
version | 패키지의 버전 npm의 버전은 다소 엄격하게 관리됨 |
entry point | 자바스크립트 실행 파일 진입점 보통 마지막으로 module.exports를 하는 파일을 지정함 package.json의 main 속성에 저장됨 |
test command | 코드를 테스트할 때 입력할 명령어 package.json의 scripts 속성 안의 test 속성에 저장됨 |
git repository | 코드를 저장해둔 Git 저장소 주소 나중에 소스에 문제가 생겼을 때 사용자들이 이 저장소에 방문해 문제를 제기할 수 있고, 코드 수정본을 올릴 수도 있음 package.json의 repository 속성에 저장됨 |
keywords | npm 공식 홈페이지(https://npmjs.com)에서 패키지를 쉽게 찾을 수 있게 해줌 package.json의 keywords 속성에 저장됨 |
license | 해당 패키지의 라이센스를 넣어주면 됨 |
5.2.3 npm 스크립트
npm init이 완료되면 폴더에 package.json이 생성됨
npm run [스크립트명]으로 스크립트 실행
5.2.4 패키지 설치하기
express 설치하기 (npm install express)
package.json에 기록됨 (dependencies에 express 이름과 버전이 추가됨)
5.2.5 node_modules
npm install 시 node_modules 폴더 생성
=> 내부에 설치한 패키지들이 들어 있음
=> express 외에도 express와 의존 관계가 있는 패키지들이 모두 설치됨
pacakge-lock.json도 생성되어 패키지 간 의존 관계를 명확하게 표시함
5.2.6 여러 패키지 동시 설치하기
npm install 패키지1 패키지2 패키지3 ...
ex) npm install morgan cookie-parser express-session
5.2.7 개발용 패키지
npm install --save-dev 패키지명 또는 npm i -D 패키지명
=> pacakge.json의 devDependencies 속성에 추가됨
5.2.8 Peer Dependencies
A 라이브러리의 peerDependecies가 다음과 같은 경우
=> A 라이브러리는 jQuery@3이 설치되었다고 간주하고 코딩한 것
ERESOLVE unable to resolve dependecy tree
=> npm i --force로 모든 버전 설치하기
=> npm i --legacy-peer-deps로 peerDependencies 무시하기
5.2.9 npm ci
· npm i를 할 때마다 package.json과 package-lock.json이 변할 수 있음
=> 배포 시에는 npm ci로 배포하기
· node_modules는 git 같은 버전 관리 시스템에 커밋할 필요가 없음
=> npm i나 npm ci를 하면 동일하게 복구됨
5.2.10 글로벌(전역) 패키지
npm install --global 패키지명 또는 npm i -g 패키지명
=> 모든 프로젝트와 콘솔에서 패키지를 사용할 수 있음
=> npx로 글로벌 설치 없이 글로벌 명령어 사용 가능
5.3 패키지 버전 이해하기
5.3.1 SemVer 버저닝
노드 패키지의 버전은 SemVer(유의적 버저닝) 방식을 따름
=> Major(주 버전), Minor(부 버전), Patch(수 버전)
노드에서 배포를 할 때 항상 버전을 올려야 함
5.3.2 버전 기호 사용하기
버전 앞에 기호를 붙여 의미를 더함
^1.1.1 | 패키지 업데이트 시 minor 버전까지만 업데이트 됨 (2.0.0 버전은 안 됨) |
~1.1.1 | 패키지 업데이트 시 patch 버전까지만 업데이트 됨 (1.2.0 버전은 안 됨) |
>=, <=, >, < | 이상, 이하, 초과, 미만 |
@latest | 최신 버전을 설치하라는 의미 |
@next | 실험적인 버전이 존재한다면 설치 (불안정함) |
1.1.1-alpha.0 2.0.0-beta.1 2.0.0-rc.0 |
각 버전마다 부가적으로 알파/베타/RC 버전이 존재할 수도 있음 |
5.4 기타 npm 명령어
npm outdated | 어떤 패키지에 기능 변화가 생겼는지 알 수 있음 |
npm update | package.json에 따라 패키지 업데이트 |
npm uninstall 패키지명 | 패키지 삭제 (npm rm 패키지명으로도 가능) |
npm search 검색어 | npm 패키지를 검색할 수 있음 (npmjs.com에서도 가능) |
npm info 패키지명 | 패키지의 세부 정보 파악 가능 |
npm login | npm에 로그인 하기 위한 명령어 (npmjs.com에서 회원가입 필요) |
npm whoami | 현재 사용자가 누구인지 알려줌 |
npm logout | 로그인한 계정을 로그아웃 |
npm version 버전 | package.json의 버전을 올림 (Git에 커밋도 함) npm version 1.1.1 (1.1.1로 만들어줌) npm version major (메이저를 하나 올려줌) npm version minor (마이너를 하나 올려줌) npm version patch (패치를 하나 올려줌) |
npm deprecate [패키지명][버전] [메시지] | 패키지를 설치할 때 경고 메시지를 띄우게 함 (오류가 있는 패키지를 적용) |
npm publish | 자신이 만든 패키지를 배포 |
npm unpublish --force | 자신이 만든 패키지를 배포 중단 (배포 후 24시간 내에만 가능) |
기타 명령어는 https://docs.npmjs.com의 CLI Commands에서 확인
5.5 패키지 배포하기
5.5.1 npm 회원가입
https://www.npmjs.com에 접속해서 회원가입
5.5.2 배포할 패키지 작성
package.json과 main 부분과 배포할 파일 경로명이 일치해야 함
5.5.3 배포 시도하기
npm publish 입력
5.5.4 버전 올리기
버전을 올리지 않으면 E403 에러
=> npm version 명령어로 버전 올리기
5.5.5 배포 취소하기
24시간 내에 npm unpublish 패키지명 --force 입력