5.1 npm 알아보기
npm은 Node Package Manager의 약자로, 말 그대로 노드 패키지 매니저이다. 개발자들이 자신의 프로젝트에 필요한 자양한 자바스크립트 라이브러리와 도구들을 쉽게 설치하고 관리할 수 있도록 돕는다.
npm을 사용하려면 Node.js를 설치해야 한다. Node.js를 설치하면 npm도 자동으로 설치된다. npm을 통해 패키지를 설치하면, 해당 패키지의 코드와 그 패키지가 의존하는 다른 패키지들도 함께 설치된다. 이는 프로젝트의 `package.json` 파일에 기록되어, 프로젝트의 의존성을 관리하는 데 도움을 준다.
npm을 사용하여 패키지를 설치, 업데이트, 제거할 수 있으며, 패키지의 버전 관리와 프로젝트의 의존성 관리 등을 손쉽게 할 수 있다.
5.2 package.json으로 패키지 관리하기
package.json 파일은 Node.js 프로젝트의 루트 디렉토리에 위치하며, 프로젝트의 메타데이터와 의존성을 관리하는 데 사용된다. 이 파일을 통해 프로젝트에 필요한 패키지(라이브러리)의 버전을 지정하고, 프로젝트 설정과 스크립트를 정의할 수 있다.
package.json 사용하기
- 1. package.json 파일 생성하기:
프로젝트 디렉토리에서 `npm init` 명령어를 실행하면, 몇 가지 질문에 답하면서 `package.json` 파일을 생성할 수 있다. 자동으로 기본값을 채워넣고 싶다면 `npm init -y`를 사용할 수 있다. - 2. 패키지 설치 및 package.json에 추가하기:
패키지를 설치하고자 할 때는 `npm install <패키지명>` 명령어를 사용한다. 이 명령어는 패키지를 `package.json`의 `dependencies` 섹션에 해당 패키지를 추가한다. 개발 시에만 필요한 패키지(예: 테스트 라이브러리)는 `npm install <패키지명> --save-dev` 명령어를 사용하여 `devDependencies`에 추가할 수 있다. - 3. 의존성 관리:
`package.json`의 `dependencies`와 `devDependencies` 섹션에 프로젝트가 의존하는 패키지들의 목록이 저장된다. 각 패키지 옆에는 설치된 버전에 대한 정보가 포함되어 있다. 버전 관리 규칙(semver)을 사용하여 특정 버전 또는 범위를 지정할 수 있다. - 4. 스크립트 정의:
`package.json`의 `scripts` 섹션을 통해 자주 사용하는 명령어를 스크립트로 정의할 수 있다. 예를 들어, `start`, `test`, `build`와 같은 스크립트를 정의하고 `npm run <스크립트명>`으로 실행할 수 있다. - 5. 프로젝트 공유 및 재설치:
프로젝트를 다른 사람과 공유하거나 다른 환경에서 프로젝트를 설정할 때, `package.json` 파일과 `package.lock.json` 파일(자동 생성됨)만 있으면 된다. `npm install` 명령어를 실행하면, 이 파일들에 명시된 의존성들이 자동으로 설치된다. - 6. 버전 관리 및 업데이트:
`npm update` 명령어를 사용하여 `package.json`에 명시된 의존성들을 최신 버전으로 업데이트할 수 있다. 패키지의 특정 버전을 지정하려면, `package.json` 파일을 직접 수정 후 `npm install`을 실행한다.
`npx`란?
npx는 node.js를 설치할 때 함께 설치되는 패키지 실행 도구이다. `npm`과 비슷해보이지만, `npx`는 설치된 패키지를 실행하거나, 설치하지 않고 일회성으로 패키지를 실행할 수 있는 기능을 제공한다. 이를 통해 디스크 공간을 절약하고, 버전 관리하기가 용이하다.
5.3 패키지 버전 이해하기
노드 패키지들의 버전은 항상 세 자리로 이루어져 있다. 노드의 버전도 세 자리이다. 이 이유는 SemVer 방식의 버전 넘버링을 따르기 때문이다.
SemVer(시맨틱 버저닝)이란?
SemVer는 소프트웨어 버전을 명확하고 의미 있게 관리하기 위한 규칙 시스템이다. 주요 버전(major), 부 버전(Minor), 패치 버전(Patch)의 세 부분으로 구성된다. 주 버전은 호환되지 않는 API 변경이 있을 때 증가한다. 부 버전은 이전 버전과 호환되면서 새로운 기능이 추가될 때 증가한다. 패치 버전은 이전 버전과 호환되는 버그 수정이 있을 때 증가한다.
예시를 들어보겠다. 버전 번호는 `주.부.패치` 형식으로 표시된다. `1.0.0`에서 `1.0.1`은 패치가 적용되었음을, `1.1.0`은 새 기능이 추가되었음을, `2.0.0`은 호환되지 않는 API 변경이 있었음을 의미한다.
npm 및 npx 사용 시 SemVer 관련 정보
`npm`에서 패키지를 설치할 때 `~`와 `^` 기호를 사용하여 SemVer 호환 버전을 지정할 수 있다.
- `~`는 가장 마지막 패치 버전까지만 업데이트를 허용한다(예: `~1.0.0`은 `1.0.1`까지 허용).
- `^`는 마지막 패치 버전까지만 업데이트를 허용한다(예: `^1.0.0`은 `1.1.0`까지 허용하지만 `2.0.0`은 허용하지 않음).
- `npx`를 사용할 때, `npx <패키지명>@<버전>` 형식으로 특정 버전을 실행할 수 있다.
- `latest` 태그를 사용하여 가장 최신 버전의 패키지를 설치하거나 실행할 수 있다.
5.4 기타 npm 명령어
`npm` 명령어에 대해 알아보겠다.
- npm outdated: 프로젝트에 설치된 패키지 중에서 업데이트 가능한 버전이 있는지 확인한다. 출력된 표에는 `Package` 이름과 현재 설치된 버전(`Current`), 설치되어야 할 버전(`Wanted`), 그리고 가능한 최신 버전(`Latest`)이 표시된다. 예시로, `nodemon` 패키지는 현재 `1.19.4` 버전이 설치되어 있으나, 원하는(`Wanted`) 버전은 `1.19.4` 이며, 사용 가능한 최신 버전(`Latest`)은 `2.0.1`이다.
- npm install <패키지명>: 지정된 패키지를 설치한다.
- npm update <패키지명>: 특정 패키지를 제거할 수 있다.
- npm search [검색어]: npm 레지스트리에서 패키지를 검색할 수 있다. 검색 결과는 이름, 설명, 저자, 날짜 등의 정보를 포함한다.
- npm info <패키지명>: 패키지에 대한 상세 정보를 조회한다.
- npm login/logout: npm 레지스트리에 로그인하거나 로그아웃한다.
- npm whoami: 현재 로그인한 npm 사용자 이름을 확인한다.
- npm version [major | minor | patch]: package.json의 버전을 업데이트한다.
- npm deprecate <패키지명>@<버전> [메시지]: 특정 버전의 패키지를 사용하지 말 것을 권고한다.
- npm publish/unpublish: 패키지를 npm 레지스트리에 배포하거나 배포 취소를 한다.
'개발' 카테고리의 다른 글
[Node.js] 1~6장 복습 (0) | 2024.02.15 |
---|---|
[Node.js] 6장 (0) | 2024.02.08 |
[Node.js] 4장 (0) | 2024.02.04 |
[Node.js] 3장 (0) | 2024.02.04 |
[Node.js] 2장 (0) | 2024.02.02 |