Logo

nvm으로 여러 Node.js 버전 관리하기

이번 포스팅에서는 하나의 컴퓨터에서 여러 버전의 Node.js를 사용할 수 있도록 도와주는 도구인 nvm(Node Version Manager)에서 대해서 알아보겠습니다.

nvm 설치

제가 Mac을 사용하는 관계로 macOS를 기준으로 nvm을 어떻게 설치하는지 설명하겠습니다.

macOS를 포함한 리눅스 계열의 운영체제에서는 nvm 사이트에서 설치 스크립트를 확인할 수 있으며, 윈도우 운영체제의 경우 nvm-windows 사이트에서 설치 파일을 다운로드 받을 수 있습니다.

터미널을 열고 다음 설치 스크립트를 실행합니다. 여기서 다운로드 URL의 버전 부분은 수시로 업데이트되오니 여기에서 최신 설치 스크립트를 복사하셔서 사용하시기 바랍니다.

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

nvm -v 명령어를 실행했을 때 nvm의 버전이 출력되면 설치가 정상적으로 끝난 것입니다. 🎉

$ nvm -v
0.39.0

설치 가능한 Node.js 버전 확인

Node.js를 설치하려면 우선 현재 설치가 가능한 Node.js 버전이 뭐뭐가 있는지를 알아야 되겠죠?

nvm ls-remote 명령어를 사용하면 설치가 가능한 모든 Node.js 버전이 출력되는데요. 버전이 너무 많기 때문에 다음과 같이 grep 명령어를 활용해서 특정 버전만 필터링해서 보면 편합니다.

예를 들어, v16으로 시작하는 버전만 필터링하려면 다음과 같이 터미널에서 명령어를 날립니다.

$ nvm ls-remote |grep v16
        v16.0.0
        v16.1.0
        v16.2.0
        v16.3.0
        v16.4.0
        v16.4.1
        v16.4.2
        v16.5.0
        v16.6.0
        v16.6.1
        v16.6.2
        v16.7.0
        v16.8.0
        v16.9.0
        v16.9.1
       v16.10.0
       v16.11.0
       v16.11.1
       v16.12.0
       v16.13.0   (Latest LTS: Gallium)

최신 버전 설치

먼저 Node.js의 최신 버전을 nvm으로 설치해보도록 하겠습니다. 포스팅을 작성하고 있는 시점 기준으로 Node.js의 최신 버전은 17.0.1입니다.

Node.js를 설치할 때는 nvm install 명령어를 사용하는데요. 이 명령어 뒤에 버전만 붙여주면 됩니다.

$ nvm install 17.0.1
Downloading and installing node v17.0.1...
Downloading https://nodejs.org/dist/v17.0.1/node-v17.0.1-darwin-arm64.tar.xz...
######################################################################################################################### 100.0%
Computing checksum with shasum -a 256
Checksums matched!
Now using node v17.0.1 (npm v8.1.0)
Creating default alias: default -> node (-> v17.0.1)

설치가 끝나면 node -v 명령어를 실행하여 정확한 버전의 Node.js가 설치되었는지 확인해볼 수 있습니다.

$ node -v
v17.0.1

Node.js의 최신 버전을 수시로 바뀔텐데 매번 최신 버전을 확인하는게 번거로울 수 있을텐데요. 다행히도 버전 부분에 node를 명시하면 최신 버전이 설치됩니다. 😌

$ nvm install node
v17.0.1 is already installed.
Now using node v17.0.1 (npm v8.1.0)

위에서 이미 설치를 하였기 때문에 이미 설치가 되었다고 나오네요.

LTS 버전 설치

이번에는 상용 환경에서 많이 사용하는 LTS(Long Term Support) 버전을 nvm으로 설치해볼까요? 포스팅을 작성하고 있는 시점 기준으로 Node.js의 LTS 버전은 16.13.0입니다.

최신 버전을 설치했을 때 처럼 nvm install 명령어 뒤에 버전을 명시해주면 됩니다.

$ nvm install 16.13.0
Downloading and installing node v16.13.0...
Downloading https://nodejs.org/dist/v16.13.0/node-v16.13.0-darwin-arm64.tar.xz...
######################################################################################################################### 100.0%
Computing checksum with shasum -a 256
Checksums matched!
Now using node v16.13.0 (npm v8.1.0)

다시 node -v 명령어를 실행해보면 이번에는 LTS 버전이 사용되는 것이 확인됩니다.

$ node -v
v16.13.0

LTS 버전에 한해서 편의를 위해 정확한 버전을 명시하는 대신에 사용할 수 있는 --lts 옵션을 제공하고 있습니다.

$ nvm install --lts
Installing latest LTS version.
v16.13.0 is already installed.
Now using node v16.13.0 (npm v8.1.0)

그런데, 다시 최신 버전의 Node.js를 사용하고 싶을 경우에는 어떻게 해야 할까요❓

사용할 버전 선택

nvm use 명령어를 사용하면 자유롭게 수시로 다른 Node.js 버전을 넘나들 수 있습니다.

예를 들어, 다시 최신 버전의 Node.js를 사용하고 싶다면 터미널에서 다음 명령어를 실행합니다.

$ nvm use 17.0.1
Now using node v17.0.1 (npm v8.1.0)

이제 Node.js 버전이 최신 버전인 17.0.1로 확인됩니다.

$ node -v
v17.0.1

설치했을 때와 동일하게 버전 자리에 node를 쓰면 최신 버전이 선택됩니다.

$ nvm use node
Now using node v17.0.1 (npm v8.1.0)

LTS 버전으로 전환할 때도 마찬가지로 --lts 옵션을 쓸 수 있으니 참고하세요.

$ nvm use --lts
Now using node v16.13.0 (npm v8.1.0)

설치되어 있는 Node.js 버전 확인

현재 내 컴퓨터에 nvm으로 설치되어 있는 모든 Node.js 버전을 확인하고 싶을 때가 있습니다. 그럴 때는 nvm ls 명령어를 사용하면 되는데요. 화살표가 가르키고 있는 버전이 현재 사용 중인 버전입니다.

$ nvm ls
       v14.16.1
        v16.6.2
->     v16.13.0
        v17.0.0
        v17.0.1
default -> node (-> v17.0.1)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v17.0.1) (default)
stable -> 17.0 (-> v17.0.1) (default)
lts/* -> lts/gallium (-> v16.13.0)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.7 (-> N/A)
lts/fermium -> v14.18.1 (-> N/A)
lts/gallium -> v16.13.0

현재 제 컴퓨터에는 Node.js가 총 5개 버전이 설치되어 있으며 그 중 16.13.0 버전을 사용 중이네요.

특정 버전의 Node.js 삭제

더 이상 필요가 없어진 Node.js 버전은 삭제해주는 것이 좋겠죠?

nvm uninstall 명령어 뒤에 삭제하고 싶은 버전을 붙여서 실행하면 됩니다.

$ nvm uninstall 16.6.2
Uninstalled node v16.6.2

기본 Node.js 버전 변경

새로운 터미널을 열 때 설치된 여러 버전의 Node.js 중에서 어떤 버전이 기본으로 사용될까요? nvm은 default라는 별칭(alias)을 통해서 기본 Node.js 버전을 관리하는데요.

nvm alias 명령어에 별칭 이름을 넘기면 해당 별칭이 가리키고 있는 실제 버전을 확인할 수 있는데요. 그럼 default 별칭에 어떤 Node.js 버전이 연결되어 있는지 확인해볼까요?

$ nvm alias default
default -> node (-> v17.0.1)

default 별칭이 node 별칭을 가리키고 있고, 이 node 별칭은 17.0.1 버전을 가리키고 있네요. 참고로 여기서 node는 Node.js의 최신 버전을 가리키는 별칭입니다. 비슷하게 lts/*라는 별칭은 Node.js의 LTS 버전을 가리키게 됩니다.

이제 기본 Node.js 버전을 현재 LTS 버진인 16.13.0 버전으로 변경해볼께요. nvm alias 명령어를 실행할 때 별칭 이름에 실제 버전을 명시헤주면 됩니다.

$ nvm alias default 16.13.0
default -> 16.13.0 (-> v16.13.0)

이렇게 별칭에 실제 버전을 연결해줄 수도 있지만 또 다른 별칭을 연결해줄 수도 있습니다. 예를 들어, default 별칭이 lts/* 별칭을 가리키게 해보겠습니다.

$ nvm alias default lts/*
$ default -> lts/* (-> v16.13.0)

이렇게 기본 Node.js 버전을 설정해놓으면 추후 LTS 버전을 업그레이드 할 때 마다 자동으로 기본 Node.js 버전이 변경되는 효과가 나겠죠?

프로젝트별 Node.js 버전 전환

여러 자바스크립트 프로젝트를 들락날락하면서 개발을 하다보면 매번 Node.js 버전을 바뀌주는 것이 귀찮게 느껴질 수 있습니다.

이럴 때는 프로젝트의 최상위 디렉토리에 .nvmrc 파일을 생성하고 그 안에 프로젝트에서 사용할 Node.js 버전을 명시해줍니다.

$ echo "16.13.0" > .nvmrc

그러면 nvm use 명령어를 실행할 때 버전을 뒤에 안 붙여도 .nvmrc 파일에 명시된 버전으로 Node.js가 전환이 됩니다.

$ nvm use
Found '/Users/daleseo/work/blog/.nvmrc' with version <16.13.0>
Now using node v16.13.0 (npm v8.1.0)

여기서 한 걸음 더 나아가 프로젝트 디렉토리에 진입할 때 자동으로 Node.js의 버전이 바뀐다면 얼마나 편할까요? 🤗

Mac 사용자라면 아래 스크립트를 복사해서 유저 홈 디렉토리의 .zshrc 파일의 제일 아래에 붙여넣어보세요.

autoload -U add-zsh-hook
load-nvmrc() {
  local node_version="$(nvm version)"
  local nvmrc_path="$(nvm_find_nvmrc)"

  if [ -n "$nvmrc_path" ]; then
    local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$node_version" ]; then
      nvm use
    fi
  elif [ "$node_version" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

그리고 나서 새 터미널 창을 열고 해당 프로젝트 디렉토리로 진입을 해보시면 다음과 같이 자동으로 .nvmrc 파일에 명시된 버전으로 Node.js가 전환이 될 것입니다.

$ cd our-project
Found '/Users/daleseo/our-project/.nvmrc' with version <16.13.0>
Now using node v16.13.0 (npm v8.1.0)

zsh 대신에 bashfish를 사용하신다면 이 페이지를 참고하셔서 세팅하시면 됩니다.

마치면서

이상으로 Node.js 버전 관리 도구인 nvm을 어떻게 사용하는지에 대해서 살펴보았습니다. 하나의 컴퓨터에서 여러 버전의 Node.js를 자유롭게 넘나들면서 사용하시는데 도움이 되셨으면 좋겠습니다.