npm이란
Node Package Manager
- 노드의 패키지 매니저
- 다른 사람들이 만든 소스 코드들을 모아둔 저장소이다. 100만 개 정도 존재한다.
- 남이 미리 작성해둔 코드를 사용하여 프로그래밍이 가능하다.
- 이미 존재하는 기능을 다시 구현할 필요가 없어 효율적이다.
- 오픈 소스 생태계를 구성중이다.
패키지
- 패키지: npm에 업로드된 노드 모듈
- 모듈이 다른 모듈을 사용할 수 있듯, 패키지도 다른 패키지를 사용할 수 있다.
- 의존 관계라고 부름
package.json
서버를 작성할 때, 보통은 서버, 세션, 쿠키 http, 요청, 헤더 관리 등 거의 대부분을 다운 받아 이들을 연결하는 작업 정도만 직접 한다. 이렇게 다운 받은 파일들의 기록이 담긴 파일을 package.json이라고 부른다.
- 같은 패키지라도 버전별로 기능이 다를 수 있으므로 버전을 기록해둬야 함
- 동일한 버전을 설치하지 않으면 문제가 생길 수 있음
- 노드 프로젝트 시작 전 package.json부터 만들고 시작한다.(npm init)
node_modules와 npx, SemVer
package-lock.json이 필요한 이유
node와 npm이 버전 문제가 많이 생긴다. package-lock.json에서는 버전을 고정해 버전 문제를 방지한다.
package-lock.json의 내용을 확인해보면 버전이 다 세 자리로 이루어진 것을 확인할 수 있다.
이런 식으로 버전을 기록하는 방식을 SemVer라고 한다.
SemVer(유의적 버저닝) 방식
- Major(주 버전), Minor(부 버전), Patch(수 버전) 으로 구성됨.
- 노드에서는 배포를 할 때 항상 버전을 올려야 함
- Major는 하위 버전과 호환되지 않은 수정 사항이 생겼을 때 올림. 대대적인 수정이 있어서 기존 코드가 돌아가지 않음을 알림
- Minor는 하위 버전과 호환되는 수정 사항이 생겼을 때 올림. 수정 사항이 있지만 기존 코드를 가진 사람들이 안심하고 사용해도 됨.
- Patch는 기능에 버그를 해결했을 때 올림. 사소한 버그 수정
버전 기호 사용하기
버전 앞에 기호를 붙여 의미를 더한다.
- ^1.1.1: 패키지 업데이트 시 minor 버전까지만 업데이트 됨(2.0.0 버전은 안됨)
- -1.1.1: 패키지 업데이트 시 patch 버전까지만 업데이트 됨(1.2.0 버전은 안됨)
- >=, <=, >, <는 이상, 이하, 초과, 미만
- @latest는 최신을 의미
- @next로 가장 최신 배포판 사용 가능(그치만 불안정함)
- 알파/베타/RC 버전이 존재할 수도 있음
npm 명령어들 알아보기
npm outdated 패키지명: 패키지 삭제(npm rm 패키지명으로도 가능)
npm update: package.json에 따라 업데이트
npm uninstall 패키지명: npm 패키지를 검색할 수 있음(npmjs.com에서도 가능)
npm info 패키지명: 패키지의 세부 정보 파악 가능
npm adduser: npm에 로그인을 하기 위한 명령어(npmjs.com에서 회원가입)
npm whoami: 현재 사용자가 누구인지 알려줌
npm logout: 로그인한 계정을 로그아웃
npm version 버전:package.json의 버전을 올림
npm ls: 내 프로젝트가 어떤 패키지를 사용하고 있는지 알려줌
npm deprecate [패키지명][버전] [메시지]: 패키지를 설치할 때 경고 메시지를 띄우게 함(오류가 있는 패키지 적용)
npm 배포하기
npm publish: 자신이 만든 패키지를 배포
npm unpublish: 자신이 만든 패키지를 배포 중단(배포 후 24시간 내에만 가능 - 다른 사람이 내 패키지를 사용하고 있는데 배포가 중단되면 문제가 생기기 때문)
npm unpublish [패키지명] --force: 72시간 내에 사용하면 배포 취소
기타 명령어는 https://docs.npmjs.com 의 CLI Commands에서 확인
'Node.js' 카테고리의 다른 글
[Backend] http 모듈로 서버 만들기 (0) | 2023.01.30 |
---|---|
[Backend] 노드 기능 (0) | 2023.01.26 |
[Backend] 프로미스 (1) | 2023.01.26 |
비구조화 할당 (0) | 2023.01.26 |
화살표 함수 (0) | 2023.01.25 |
댓글