# node.js 버전 여러개 사용하기


개발하다보면 프로젝트마다 필요한 node.js의 버전이 다른 경우가 있습니다. 매번 node.js를 지우고 다시 깔기는 너무 귀찮으니, 저 같은 경우 node.js 버전 관리자인 `fnm`을 이용해서 여러 버전을 동시에 설치하고 관리합니다. 다른 node.js 버전 관리자도 많지만, `fnm`이 가장 편하고 빨랐습니다.

## 설치 방법

설치 방법도 간단합니다. OS별 패키지 매니저로 설치할 수도 있고 스크립트로 설치할 수도 있는데요, 어느 쪽이든 한 줄로 끝납니다. 리눅스나 mac 같은 posix 계열 운영체재를 사용하시는 경우 아래 명령어를 터미널에서 입력하시면 설치가 끝납니다.

```sh
curl -fsSL https://fnm.vercel.app/install | bash
```

저 같은 경우는 맥북을 쓰기 떄문에 homebrew를 이용해서 설치했는데요, 역시 한줄로 끝납니다.

```sh
brew install fnm
```

[모든 설치 방법 보기](https://github.com/Schniz/fnm#installation)

## `--use-on-cd`

`fnm env` 명령어의 `--use-on-cd` 옵션을 켜두면 프로젝트별로 필요한 node.js 버전이 다른 경우에 유용합니다. 이를 하기 위해서는, 쉘의 rc 파일을 열고

```sh
eval "`fnm env`"
```

을

```sh
eval "`fnm env --use-on-cd`"
```

로 바꾸시면 됩니다. 저는 zsh를 쓰므로, 제 rc 파일의 이름은 `.zshrc` 였습니다.

## 자동 완성 설정

명령어 자동 완성이 없으면 사용하기 불편하니까 자동 완성도 구성해주도록 하겠습니다. 설정 방법은 사용하는 쉘에 따라 조금씩 다른데요, 거의 비슷하니까 조금만 수정해주시면 됩니다.

저는 zsh를 사용하므로 아래처럼 설치했습니다.

```sh
# 홈에 .zsh_completions 폴더 생성
mkdir -p ~/.zsh_completions

# 자동완성용 파일 생성
fnm completions --shell zsh > ~/.zsh_completions/_fnm

# zsh에 자동완성 파일 등록
echo "fpath=(/home/.zsh_completions/_fnm $fpath)" >> ~/.zshrc
```

## fnm 이용

이용법은 제가 실제로 쓰는 명령어들에 대해서만 적어보려고 합니다.

### 특정 버전의 node.js 설치

`fnm`이 node.js 버전 관리를 위해 존재하는 툴인만큼, node.js 설치가 매우 쉽습니다. 17 버전의 node.js를 설치하고 싶은 경우,

```sh
fnm install 17
```

를 하시면 됩니다. 아래는 제 컴퓨터에서 실행한 결과입니다.

```rust
❯ fnm install 17
Installing Node v17.9.1 (arm64)
```

v17.9.1이 깔린 걸 볼 수 있습니다.

### 현재 node.js 버전 확인

`node` 명령어의 버전을 알고 싶으신 경우 아래 명령어로 할 수 있습니다.

```sh
fnm current
```

### 특정 버전의 node.js로 전환

`node` 명령어의 버전을 바꾸고 싶으신 경우, 아래 명령어로 하실 수 있습니다.

```sh
fnm use 16
```

### 프로젝트별 node.js 버전 설정

여러 버전의 node.js 를 사용하는 주된 아유는 프로젝트마다 필요한 node.js 버전이 달라서인데요, 프로젝트별로 필요한 node.js 버전을 외우고 있어야하면 머리 아픕니다. 그래서 `fnm`은 `.node-version`, 혹은 `.nvmrc`라는 파일을 이용해서 프로젝트별로 자동으로 노드 버전 바꾸는 걸 지원합니다.

```sh
echo 'v18.3.0' > .node-version
```

위의 명령어를 터미널에 입력하시면 `.node-version`이라는 파일이 생성되는데요, 위에서 설명한 대로 `--use-on-cd`를 켠 채로 `fnm`을 구성해두셨으면 자동으로 노드 버전이 바뀝니다.
