logo
Posts
npm

npm

npm(Node Package Manager) 은 Node.js의 기본 패키지 관리 도구로, 프로젝트 의존성 관리와 패키지 설치에 필수적입니다. 이 글에서는 npm 설치 확인부터 프로젝트를 시작하고 관리하는 방법까지 알아보겠습니다.

npm 설치 확인

먼저 npm 이 시스템에 설치되어 있는지 확인해야 합니다.
이를 확인하려면 터미널에서 다음 명령어를 실행하세요.

npm -v

혹은 아래 명령어를 사용해도 동일한 결과를 얻을 수 있습니다.

npm --version

정상적으로 설치되어 있다면, 다음과 같이 npm 버전이 출력됩니다.

10.5.0

npm 은 Node.js 설치 시 자동으로 함께 설치됩니다. npm 의 버전이 확인되지 않았다면, Node.js 가 설치되지 않았을 가능성이 있습니다. 이 경우, Node.js 공식 웹사이트 (opens in a new tab)에서 Node.js와 npm 을 함께 설치할 수 있습니다. 또는, 이전 글을 참고하여 Node.js 설치 방법을 확인해 보세요.

npm 명령어로 프로젝트 시작하기

npm 은 package.json 파일을 사용하여 프로젝트의 의존성을 관리합니다.
새로운 Node.js 프로젝트를 시작하려면 다음 명령어를 프로젝트 루트 디렉토리에서 사용해 보세요.

npm init

위 명령어는 다음과 같은 상황에서 사용됩니다.

  • 새로운 프로젝트를 시작할 때
  • 이미 존재하는 프로젝트에 패키지 관리를 추가할 때

npm init 명령어를 실행하면 프로젝트 이름, 버전, 설명 등 다양한 정보를 입력하도록 요청받습니다. 이 정보를 모두 입력하면 프로젝트 루트에 package.json 파일이 생성됩니다. 이 파일은 프로젝트의 모든 패키지와 스크립트를 관리합니다.

package.json 파일에 대해서는 이전 글인 package.json에서 자세히 다루었습니다.

빠른 시작

npm init 명령어는 상세한 정보를 입력해야 합니다. 모든 기본값을 사용해 빠르게 프로젝트를 초기화하고 싶다면, 다음 명령어를 사용할 수 있습니다.

npm init -y

이 명령어는 사용자 입력 없이 기본값을 자동으로 설정해 즉시 package.json 파일을 생성합니다.

npm 패키지 설치

npm 을 사용하면 프로젝트에 다양한 패키지를 설치할 수 있습니다.
다음 명령어를 사용하여 패키지를 설치해 보세요.

npm install 패키지명

이 명령어를 실행하면, 해당 패키지와 그에 필요한 의존성들이 node_modules 폴더에 설치됩니다. 만약, node_modules 폴더가 없다면 자동으로 생성됩니다. 또한 package.json 파일에도 자동으로 기록되어 이후 설치 시 동일한 버전의 패키지가 사용됩니다.

예를 들어, express 패키지를 설치하려면 다음 명령어를 사용합니다.

npm install express

패키지 버전 지정하여 설치

npm 은 단순히 패키지를 다운로드하는 것 외에도 버전 관리를 지원하여, 특정 버전의 패키지를 설치하거나 필요한 버전보다 높거나 낮은 버전을 요구할 수 있습니다.

종종 어떤 라이브러리가 다른 라이브러리의 특정 메이저 버전과만 호환되는 경우가 있습니다. 혹은 최신 버전에서 해결되지 않은 버그가 문제를 일으키는 상황도 있을 수 있습니다.

이런 경우, 특정 라이브러리의 명확한 버전을 지정하면 팀의 모든 구성원이 동일한 버전을 사용할 수 있어, package.json 파일이 업데이트될 때까지 동일한 환경을 유지할 수 있습니다.

이와 같은 상황에서 버전 관리는 큰 도움이 됩니다. npm 은 Semantic Versioning(의미적 버전 관리, SemVer) 표준을 따릅니다.

특정 버전의 패키지를 설치하려면 다음과 같이 버전을 지정할 수 있습니다.

npm install 패키지명@버전

예를 들어, express 패키지의 4.17.1 버전을 설치하려면 다음 명령어를 사용합니다.

npm install express@4.17.1

패키지 최신 버전 설치

npm install 패키지명으로 설치할 때, 버전을 따로 지정하지 않으면 npm은 기본적으로 저장소에 등록된 최신 안정화 버전을 설치합니다. 이는 @latest 태그와 동일하게 동작합니다.

그러나 @latest 태그를 명시적으로 사용하는 경우는 크게 두 가지 상황에서 유용합니다. 예를 들어, 다른 명령어와 혼동을 방지하거나, 최신 버전을 명시적으로 요구하고자 하는 경우입니다.

  1. 이미 특정 버전이 설치된 경우 최신 버전으로 업데이트할 때: 프로젝트에 특정 버전의 패키지가 설치되어 있는 상태에서, 해당 패키지를 최신 안정화 버전으로 명시적으로 업데이트하고자 할 때 @latest 를 사용할 수 있습니다.
  2. 최신 버전을 명시적으로 요구할 때: 버전을 명시하지 않아도 최신 안정화 버전이 설치되지만, 특정 상황에서 최신 버전이 반드시 필요하다는 것을 명확히 표현하고 싶을 때 @latest 를 사용합니다.
npm install express@latest

대체로 @latest 는 패키지를 업데이트할 때 주로 사용되며, 패키지를 새로 설치할 때는 버전을 생략하는 것이 보편적입니다.

패키지 전역 설치

일부 패키지는 전역으로 설치하여 어디서든 사용할 수 있습니다. 전역으로 패키지를 설치하려면 -g 옵션을 사용합니다.

npm install -g 패키지명

예를 들어, vite 패키지를 전역으로 설치하려면 다음 명령어를 사용합니다.

npm install -g vite
⚠️

주의점 : 전역으로 설치된 패키지는 프로젝트의 의존성으로 기록되지 않습니다.

전역으로 설치된 패키지는 프로젝트 루트 디렉토리가 아닌 다른 디렉토리에서도 사용할 수 있습니다. 그러나 개발 중인 로컬 환경이 아니라, 배포하는 운영 환경에 해당 패키지가 필요할 수 있습니다. 이런 경우에는 반드시 프로젝트의 package.json 파일에 해당 패키지를 명시하여 의존성으로 추가해야 합니다.

패키지 설치 옵션

npm 5 버전 이전에는 --save 플래그를 수동으로 추가해야 했습니다. npm 5 버전 이후로는 패키지를 설치할 때, 해당 패키지가 자동으로 package.json 파일의 dependencies 항목에 추가되는, --save 플래그가 기본으로 적용됩니다.

이 명령어에 자주 추가되는 플래그는 다음과 같습니다.

  • --save-dev: 패키지를 설치하고 package.json 파일의 devDependencies 항목에 추가합니다.
  • --no-save: 패키지를 설치하지만, package.json 파일의 dependencies 항목에 추가하지 않습니다
  • --save-optional: 패키지를 설치하고 package.json 파일의 optionalDependencies 항목에 추가합니다.
  • --no-optionals: 패키지를 설치하지만, package.json 파일의 optionalDependencies 항목에 추가하지 않습니다.

플래그들의 단축어도 사용할 수 있습니다.

  • -S: --save 의 단축어
  • -D: --save-dev 의 단축어
  • -O: --save-optional 의 단축어
💡

개발 중 필요한 도구들은 devDependencies 에, 실제 운영에 필요한 패키지는 dependencies 에 구분하여 관리하는 것이 좋습니다.

devDependencies 와 dependencies 의 차이는 다음과 같습니다.
devDependencies 는 테스트 라이브러리와 같은 개발 도구를 포함하는 반면, dependencies 는 실제 프로덕션 환경에서 애플리케이션과 함께 번들됩니다.

즉, 실제 배포 시 devDependencies 에 포함된 패키지는 설치되지 않으므로, 배포 환경에서는 더 작은 용량의 애플리케이션을 만들 수 있다는 장점이 있습니다. 이를 통해 빌드 속도가 빨라지고, 서버 리소스를 절약할 수 있습니다. 특히, 서버나 클라우드 환경에서는 애플리케이션의 용량이 줄어들면 네트워크 비용도 절감될 수 있습니다.

npm 패키지 삭제

이미 설치된 패키지를 삭제하려면 다음 명령어를 사용합니다.

npm uninstall 패키지명

이 명령어는 node_modules 폴더에서 해당 패키지를 삭제하고, package.json 파일에서 의존성 목록도 자동으로 업데이트합니다. 삭제된 패키지가 package-lock.json 파일에 기록되어 있다면, 이 파일도 함께 수정됩니다.

예를 들어, express 패키지를 삭제하려면 다음 명령어를 사용합니다.

npm uninstall express

npm 패키지 업데이트

모든 패키지를 최신 버전으로 업데이트하려면 다음 명령어를 사용합니다.

npm update

이 명령어는 node_modules 폴더에 설치된 모든 패키지를 최신 버전으로 업데이트합니다. 그리고, package.json 및 package-lock.json 파일에서 의존성 목록도 자동으로 업데이트합니다.

만약, 이미 설치된 패키지 중 하나를 최신 버전으로 업데이트하려면 다음 명령어를 사용합니다.

npm update 패키지명

예를 들어, express 패키지를 최신 버전으로 업데이트하려면 다음 명령어를 사용합니다.

npm update express

npm 스크립트 명령어

npm 은 package.json 파일에 정의된 스크립트를 실행하는 기능을 제공합니다. 프로젝트에서 자주 사용하는 명령을 정의해 두면, npm 스크립트로 쉽게 실행할 수 있습니다.

스크립트 정의

먼저, package.json 파일의 "scripts" 섹션에 명령어를 정의합니다. 예를 들어, build 라는 명령어를 추가하고 싶다면 아래와 같이 작성할 수 있습니다.

{
	"scripts": {
		"build": "node build.js"
	}
}

위 예제에서는 build 라는 명령어를 추가하고, 이 명령어를 실행하면 node build.js 명령어가 실행됩니다.

스크립트 실행

"scripts" 섹션에 정의한 스크립트는 npm run 명령어로 실행할 수 있습니다.

npm run 스크립트명

예를 들어, 위에서 선언한 build 스크립트를 실행하려면 다음과 같이 사용합니다.

npm run build

기본 스크립트 명령어

npm은 몇 가지 자주 사용되는 기본 스크립트 명령어를 제공합니다. 이 명령어들은 run 을 생략하고 바로 사용할 수 있습니다.

  • start: npm start 명령어는 "scripts" 섹션에 정의된 start 스크립트를 실행합니다. 주로 서버의 시작과 같은 작업에 자주 사용됩니다.
npm start
  • test: npm test 명령어는 "scripts" 섹션에 정의된 test 스크립트를 실행합니다. 일반적으로 테스트 코드를 실행하는 데 자주 사용됩니다.
npm test

이와 같이 기본 스크립트 명령어는 프로젝트에서 자주 사용하는 작업을 간단하게 실행할 수 있도록 도와줍니다.

npm 에 대해 알아보았습니다.
다음 글에서는 비동기 프로그래밍과 콜백 함수에 대해 알아보겠습니다.