-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs: add concepts-and-features-of-nodejs.md (#9)
* docs: add concepts-and-features-of-nodejs.md * fix: typo
- Loading branch information
1 parent
74e49e7
commit cc03db8
Showing
1 changed file
with
200 additions
and
0 deletions.
There are no files selected for viewing
200 changes: 200 additions & 0 deletions
200
docs/languages/npm/npm-concepts-and-frequently-used-cli-commands.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,200 @@ | ||
# `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`의 버전을 확인할 수 있다. | ||
|
||
- 입력 | ||
|
||
```bash | ||
npm --version | ||
``` | ||
|
||
- 출력 | ||
|
||
```bash | ||
10.8.1 | ||
``` | ||
|
||
## 2. `npm init` | ||
|
||
> aliases: `create`, `innit` | ||
`npm` 패키지를 생성(초기화)하며, `package.json`을 생성한다. | ||
|
||
- 입력 | ||
|
||
```bash | ||
npm init | ||
``` | ||
|
||
- 출력 | ||
|
||
```bash | ||
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` 플래그를 통해 질문에 답변할 필요 없이, 모든 답변에 <Kbd>y</kbd>를 입력한 것과 같은 효과를 낼 수 있다. | ||
|
||
주로, 터미널에서 직접 설정하기 보다는 `package.json`을 변경하는 것이 직관적이므로, `npm init --yes` 명령어를 통해 터미널 설정을 생략하고 `package.json`을 생성하기 위해 사용한다. | ||
|
||
```bash | ||
npm init --yes | ||
``` | ||
|
||
## 3. `npm install` | ||
|
||
> aliases: `add`, `i`, `in`, `ins`, `inst`, `insta`, `instal`, `isnt`, `isnta`, `isntal`, `isntall` | ||
`npm install`의 동작을 둘로 나누면 아래와 같다. | ||
|
||
1. 패키지를 명시해 특정 패키지를 설치하는 동작.<sup>1</sup> | ||
1. 패키지를 명시하지 않고, `package.json` 파일의 `dependencies`(의존성) 및 `devDependencies`(개발의존성)를 모두 설치하는 동작.<sup>2</sup> | ||
|
||
예를 들어, | ||
|
||
1. `npm install react`를 실행하면 `react` 모듈을 설치할 것이고<sup>1</sup>, | ||
1. `npm install`을 실행하면 `package.json`에 포함된 의존성 패키지들을 일괄적으로 설치할 것이다<sup>2</sup>. | ||
|
||
### 3-1. 패키지를 명시해 특정 패키지를 설치하는 동작<sup>1</sup> | ||
|
||
특정 패키지를 설치할 때<sup>1</sup>에도, 크게 두 가지 옵션이 존재한다. | ||
|
||
1. `npm install [<@scope>/]<name>@<version>`을 통해, 프로젝트를 구동할 때 필요한 `dependencies` 목록에 추가될 패키지를 설치하는 옵션<sup>1-1</sup>. | ||
1. `npm install --save-dev [<@scope>/]<name>@<version>`을 통해, 개발 단계에서만 필요한 `devDependencies` 목록에 추가될 패키지를 설치하는 옵션<sup>1-2</sup>. | ||
|
||
#### 3-1-1. Flags: <code> </code>(생략)<sup>1-1</sup> | ||
|
||
> aliases: `--save-prod`, `--save`, `-P` | ||
플래그를 생략할 경우, 자동으로 `--save-prod`로 인식한다. | ||
|
||
`package.json`의 `dependencies`(의존성)에 추가한다. `dependencies`는 `react` 패키지처럼, 실제 코드에 포함되는 앱 구동을 위해 필요한 의존성 파일들을 뜻한다. | ||
|
||
```bash | ||
npm install [<@scope>/]<name>@<version> | ||
``` | ||
|
||
> [!TIP] | ||
> | ||
> 1. `@<version>`을 입력하지 않으면, 패키지의 최신 버전으로 설치된다. | ||
> | ||
> 1. `@latest`를 통해 최신 버전을 설치할 수 있다. (업데이트에 활용.) | ||
> | ||
> 1. 여러 패키지를 나열하여, 동시에 여러 패키지를 설치할 수 있다. | ||
> | ||
> ```bash | ||
> $ npm install react react-dom@latest | ||
> ``` | ||
#### 3-1-2. Flags: `--save-dev`<sup>1-2</sup> | ||
|
||
> aliases: `-D` | ||
`package.json`의 `devDependencies`(개발의존성)에 추가한다. `devDependencies`는 `eslint` 패키지처럼 실제 코드에 포함되지 않으며, 개발 단계에만 필요한 의존성 파일들을 뜻한다. | ||
|
||
```bash | ||
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. 패키지를 명시하지 않고, ... 모두 설치하는 동작<sup>2</sup> | ||
|
||
패키지명 없이 `npm install`만을 실행하게 되면, 프로젝트의 `package.json`에 기록된 모든 `dependencies`(의존성) 및 `devDependencies`(개발의존성)를 내려받는다. | ||
|
||
#### 3-2-1. Flags: `--production` | ||
|
||
`devDependencies` 파일은 개발에만 사용되기에, 일반 사용자들이 해당 패키지를 내려받는 것은 낭비일 수 있다. 이때 사용하는 플래그가 `--production`으로, 해당 플래그를 붙이면 `devDependencies`(개발의존성)를 제외한 `dependencies`(의존성) 파일만을 내려받는다. | ||
|
||
```json | ||
{ | ||
"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`에서도 삭제된다. | ||
(단, 설치할 때 특정 옵션을 사용했다면, 삭제할 때도 같은 옵션을 넣어주자.) | ||
|
||
```bash | ||
npm uninstall [<@scope>/]<pkg>... | ||
``` | ||
|
||
## 5. `npm update` | ||
|
||
> aliases: `up`, `upgrade`, `udpate` | ||
설치된 패키지를 최신 버전으로 업데이트한다. (의존성이 엮여있는 패키지를 잘못 업데이트할 경우, 기존 프로젝트에 오류가 발생할 수 있으니 주의하자.) | ||
|
||
```bash | ||
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/> |