Table of Contents
npm
- npm(Node Package Manager)은 Node.js 생태계의 패키지 관리자입니다.
- 2009년에 처음 출시된 이후, Node.js와 JavaScript 커뮤니티에서 없어서는 안 될 중요한 도구로 자리 잡았습니다.
- npm은 전 세계 개발자들이 만든 패키지와 라이브러리를 쉽게 설치하고 관리할 수 있게 해 주며, 개발 환경 설정과 프로젝트 의존성 관리를 단순화합니다.
- 현재는 오픈소스 패키지와 유료 패키지를 제공하며, npm registry에 수백만 개의 패키지가 등록되어 있습니다.
npm 명령어
- npm은 다양한 명령어를 통해 패키지와 프로젝트 관리를 쉽게 할 수 있습니다. 몇 가지 필수적인 명령어를 살펴보겠습니다.
npm init
- 새 프로젝트를 시작할 때 사용합니다.
npm init
은 프로젝트의 package.json 파일을 생성하고, 프로젝트의 기본 정보를 설정할 수 있는 대화형 모드를 실행합니다.npm init -y
를 사용하면 기본값으로 package.json을 빠르게 생성합니다.
npm install (또는 npm i)
- 패키지를 설치할 때 사용합니다.
- 예를 들어
npm install express
를 입력하면, express 라이브러리가 프로젝트에 설치됩니다. --save
플래그는 이제 기본값으로 적용되며, 설치된 패키지는 package.json의 dependencies 섹션에 추가됩니다.--save-dev
는 개발 의존성으로 설치합니다. 예를 들어, 테스트 라이브러리는 보통 개발 의존성에 추가됩니다.
npm update
- 프로젝트의 모든 패키지를 최신 버전으로 업데이트합니다.
- package.json의 버전 범위 안에서 업데이트를 적용하므로, 패키지가 메이저 업데이트로 인해 큰 변경이 발생하는 것을 방지할 수 있습니다.
npm uninstall
- 패키지를 제거합니다.
npm uninstall package-name
으로 설치된 특정 패키지를 삭제할 수 있습니다.
npm list
- 현재 프로젝트에 설치된 모든 패키지와 버전을 트리 구조로 표시합니다.
- 프로젝트 의존성의 구조를 한눈에 확인할 수 있어 유용합니다.
Semver (Semantic Versioning)
- npm은 Semver (Semantic Versioning)라는 버전 관리 규칙을 따릅니다.
- Semver는 주 버전(major), 부 버전(minor), 패치 버전(patch) 세 가지 숫자로 버전을 구성합니다.
- 주 버전 (Major): 이전 버전과 호환되지 않는 큰 변경이 있을 때 업데이트됩니다. 예를 들어, 2.0.0에서 3.0.0으로 변경 시 기존 코드와 호환되지 않을 수 있습니다.
- 부 버전 (Minor): 새로운 기능이 추가되지만 기존과 호환이 유지될 때 업데이트됩니다. 2.1.0에서 2.2.0으로 변경하는 경우입니다.
- 패치 버전 (Patch): 버그 수정이나 작은 변경이 있을 때 업데이트됩니다. 예를 들어, 2.1.1에서 2.1.2로 변경됩니다.
- npm에서는 Semver를 사용하여 버전 범위를 설정할 수 있습니다:
- ^: 부 버전과 패치 버전의 변경을 허용합니다 (예: ^1.2.3).
- ~: 패치 버전의 변경만 허용합니다 (예: ~1.2.3).
- *: 가능한 모든 버전을 허용합니다.
- 이를 통해 특정 버전 범위 내에서 안전하게 의존성을 관리할 수 있습니다.
npx
- npx는 npm에서 패키지를 설치하지 않고도 명령어를 실행할 수 있도록 해 주는 도구입니다.
- npm 5.2.0 버전부터 기본적으로 포함되어 있으며, 일회성 패키지 실행이나 CLI 도구를 사용할 때 유용합니다.
- 예를 들어,
npx create-react-app my-app
명령을 사용하면,create-react-app
패키지를 프로젝트에 설치하지 않고도 즉시 실행하여 React 앱을 생성할 수 있습니다. npx는 로컬에 없는 패키지의 경우 자동으로 다운로드하여 실행하고, 이후에는 삭제합니다. - 주요 용도
- 일회성 명령 실행: 특정 작업을 위해 패키지를 설치할 필요 없이 바로 실행할 수 있습니다.
- 버전 관리가 필요한 패키지 실행: 특정 버전의 패키지를 지정해서 실행할 수 있습니다.