npm
개념 및 자주 사용하는 CLI 명령어 모음
Package(Module)는 프로그램의 구성요소 중 특정 기능을 수행할 수 있는 코드 집합을 의미한다. 유명 플랫폼들은 저마다의 Package Manager를 가지고 있다.
- Python: pip
- Java: Maven, Gradle
- PHP: Composer
- Ruby: RubyGems
- Linux(RedHat): rpm, yum
- Linux(Debian): dpkg, apt
- Mac: Homebrew
이처럼, npm
(Node Package Manager)은 Node.js 기반 모듈의 설치 및 관리를 도와주는 프로그램이다. 전 세계 개발자들이 JavaScript 기반의 오픈 소스 모듈을 npm
저장소에 올려두면, 사용자들은 npm
명령어를 통해 특정 모듈을 다운로드하여 사용한다.
npm
은 따로 설치할 필요 없이, Node.js를 설치하면 자동으로 함께 설치된다.
여러 강좌나 개발 문서를 따라가다 보면, npm install
등의 다양한 명령어에 --save-dev
, -g
등 여러 플래그가 붙은 것을 확인할 수 있는데, 이것들은 무엇이고 어떤 역할을 하는지 알아보자.
1. npm
1-1. Flags
1-1-1. --version
aliases:
-v
npm
의 버전을 확인할 수 있다.
-
입력
npm --version
-
출력
10.8.1
2. npm init
aliases:
create
,innit
npm
패키지를 생성(초기화)하며, package.json
을 생성한다.
-
입력
npm init
-
출력
package name: (name) # 패키지 및 디렉토리 이름이다. (name)은 기본 값이다. version: (1.0.0) # 패키지 버전이다. (1.0.0)은 기본 값이다. description: # 패키지에 대한 설명이다. entry point: (index.js) # 시작 파일 이름이다. (index.js)는 기본 값이다. git repository: # 패키지가 저장되어 있는 Git 저장소의 URL이다. keywords: # 패키지의 키워드이다. author: # 원작자의 이름이다. 이름이나 아이디를 입력하면 된다. license: (ISC) # 패키지 사용에 대한 라이선스이다. (ISC)는 기본 값이다.
2-1. Flags
2-1-1. --yes
aliases:
-y
--yes
플래그를 통해 질문에 답변할 필요 없이, 모든 답변에 y를 입력한 것과 같은 효과를 낼 수 있다.
주로, 터미널에서 직접 설정하기 보다는 package.json
을 변경하는 것이 직관적이므로, npm init --yes
명령어를 통해 터미널 설정을 생략하고 package.json
을 생성하기 위해 사용한다.
npm init --yes
3. npm install
aliases:
add
,i
,in
,ins
,inst
,insta
,instal
,isnt
,isnta
,isntal
,isntall
npm install
의 동작을 둘로 나누면 아래와 같다.
- 패키지를 명시해 특정 패키지를 설치하는 동작.1
- 패키지를 명시하지 않고,
package.json
파일의dependencies
(의존성) 및devDependencies
(개발의존성)를 모두 설치하는 동작.2
예를 들어,
npm install react
를 실행하면react
모듈을 설치할 것이고1,npm install
을 실행하면package.json
에 포함된 의존성 패키지들을 일괄적으로 설치할 것이다2.
3-1. 패키지를 명시해 특정 패키지를 설치하는 동작1
특정 패키지를 설치할 때1에도, 크게 두 가지 옵션이 존재한다.
npm install [<@scope>/]<name>@<version>
을 통해, 프로젝트를 구동할 때 필요한dependencies
목록에 추가될 패키지를 설치하는 옵션1-1.npm install --save-dev [<@scope>/]<name>@<version>
을 통해, 개발 단계에서만 필요한devDependencies
목록에 추가될 패키지를 설치하는 옵션1-2.
3-1-1. Flags:
(생략)1-1
aliases:
--save-prod
,--save
,-P
플래그를 생략할 경우, 자동으로 --save-prod
로 인식한다.
package.json
의 dependencies
(의존성)에 추가한다. dependencies
는 react
패키지처럼, 실제 코드에 포함되는 앱 구동을 위해 필요한 의존성 파일들을 뜻한다.
npm install [<@scope>/]<name>@<version>
Tip
-
@<version>
을 입력하지 않으면, 패키지의 최신 버전으로 설치된다. -
@latest
를 통해 최신 버전을 설치할 수 있다. (업데이트에 활용.) -
여러 패키지를 나열하여, 동시에 여러 패키지를 설치할 수 있다.
$ npm install react react-dom@latest
3-1-2. Flags: --save-dev
1-2
aliases:
-D
package.json
의 devDependencies
(개발의존성)에 추가한다. devDependencies
는 eslint
패키지처럼 실제 코드에 포함되지 않으며, 개발 단계에만 필요한 의존성 파일들을 뜻한다.
npm install --save-dev [<@scope>/]<name>@<version>
3-1-3. Flags: --global
aliases:
-g
패키지를 프로젝트(Local)가 아닌, 시스템의 node_modules
폴더에 전역(Global)으로 설치한다. 이를 통해 다른 Node.js 프로젝트에서도 해당 패키지를 사용할 수 있다.
OS | Path |
---|---|
Window | C:\Users\%USERPROFILE%\AppData\Roaming\npm\node_modules |
Mac | /usr/local/lib/node_modules |
--global
(-g
) 플래그를 사용할 경우, package.json
에 기록되지 않는다.
시스템의 node_modules
경로는 npm root -g
를 통해 찾을 수 있다.
3-2. 패키지를 명시하지 않고, ... 모두 설치하는 동작2
패키지명 없이 npm install
만을 실행하게 되면, 프로젝트의 package.json
에 기록된 모든 dependencies
(의존성) 및 devDependencies
(개발의존성)를 내려받는다.
3-2-1. Flags: --production
devDependencies
파일은 개발에만 사용되기에, 일반 사용자들이 해당 패키지를 내려받는 것은 낭비일 수 있다. 이때 사용하는 플래그가 --production
으로, 해당 플래그를 붙이면 devDependencies
(개발의존성)를 제외한 dependencies
(의존성) 파일만을 내려받는다.
{
"devDependencies": {
"eslint": "^9.8.0"
},
"dependencies": {
"react": "^18.3.1"
}
}
위와 같이 기록된 packages.json
에 npm install --production
을 실행하면, eslint
를 제외한 react
패키지만을 설치한다.
4. npm uninstall
aliases:
unlink
,remove
,rm
,r
,un
명령 뒤에 삭제할 패키지명을 입력하면, 설치된 패키지 관련 모든 파일이 node_modules
에서 삭제될 뿐만 아니라, package.json
에서도 삭제된다.
(단, 설치할 때 특정 옵션을 사용했다면, 삭제할 때도 같은 옵션을 넣어주자.)
npm uninstall [<@scope>/]<pkg>...
5. npm update
aliases:
up
,upgrade
,udpate
설치된 패키지를 최신 버전으로 업데이트한다. (의존성이 엮여있는 패키지를 잘못 업데이트할 경우, 기존 프로젝트에 오류가 발생할 수 있으니 주의하자.)
npm update [<pkg>...]
Reference
- https://docs.npmjs.com/cli/v10/commands/npm-install
- https://carrotweb.tistory.com/107
- https://binit.tistory.com/36
- https://kdydesign.github.io/2017/07/15/nodejs-npm-tutorial/
- https://hellominchan.tistory.com/10
- https://velog.io/@me2designer/NPM-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95
- https://c17an.netlify.app/blog/node.js/npm-install-%EC%A0%95%EB%A6%AC/article/