Node Version Manager
한 마디로 Node.js 의 버전을 관리하는 도구입니다.
이렇게만 들었을 땐 사실 잘 모르겠어요.
Node.js 의 버전을 굳이? 왜 관리해야 하는거죠?
협업을 할 때, 또는 다양한 프로젝트를 동시에 진행해야 할 때
다양한 라이브러리 / 프레임워크 / 개발툴의 버전 호환 문제를 겪어서요.
이럴 때 NVM
을 사용하면 아래와 같은 이점을 챙겨갈 수 있거든요.
루비의 rvm
, rbenv
나 파이썬의 pyenv
도 같은 역할을 한다고 하네요.
보다 더 자세한 내용을 위해서는 NVM repository(공식 문서) 참고
일단 터미널을 열고 다음 커맨드를 입력해주세요.
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
이 설치 스크립트를 실행하고 나면 두 가지 변화가 생깁니다.
- 쉘 설정 파일에
nvm
명령어 스크립트가 추가됩니다.
전 zsh
쉘을 사용하기 때문에 ~/.zshrc
파일에 스크립트 파일이 추가될 거구요. bash
쉘을 사용하신다면 ~/.bash_profile
에 추가가 됩니다.
다음 커맨드를 통해 확인해보세요.
$ vi ~/.zshrc
# ~/.zshrc
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
~/.nvm
폴더가 생성됩니다.
위 경로에 nvm
레포지토리가 복사됩니다.
=> Downloading nvm from git to '/Users/jenga/.nvm'
=> '/Users/jenga/.nvm'에 복제합니다...
터미널을 보시면 이런 식으로 뜰 거예요.
그리고 이제부터는 해당 경로에 nvm
을 이용해 설치한 노드가 버전별로 다운로드됩니다. versions
폴더에서 확인 가능해요.
아직 어떤 버전의 노드도 설치하지 않았다면, 지금은 비어 있을 겁니다.
가이드대로 설치를 하고 나니 터미널에 이런 문구가 떴습니다.
npm ERR! peer dep missing: @expo/xdl@54.1.5, required by @expo/dev-tools@0.5.26
=> You currently have modules installed globally with `npm`. These will no
=> longer be linked to the active version of Node when you install a new node
=> with `nvm`; and they may (depending on how you construct your `$PATH`)
=> override the binaries of modules installed with `nvm`:
/usr/local/lib
├── create-react-app@3.0.0
├── eslint@6.8.0
├── expo-cli@2.20.2
└── serve@11.1.0
=> If you wish to uninstall them at a later point (or re-install them under your
=> `nvm` Nodes), you can remove them from the system Node as follows:
$ nvm use system
$ npm uninstall -g a_module
=> Close and reopen your terminal to start using nvm or run the following to use it now:
윗부분에 뜬 npm Err!
의 경우...
제가 이미 node
를 설치해 여러 프로젝트를 진행한 바가 있기 때문에 발생한 에러입니다.
이미 npm (Node Package Manager)
을 사용해 전역으로 설치해둔 패키지들이 있는데,
nvm
을 사용하여 새로운 node 버전을 설치할 경우
그 패키지들과의 의존성이 깨진다는 이야기를 하고 있는 것 같아요.
그러니 애초부터 nvm
을 설치하고, 그 이후에 node
를 깔아서 버전관리를 하는 것이 좋겠죠?
이 문제는 다른 포스트에서 다루겠습니다.
마지막 줄을 보시면, Close and reopen your terminal to start using nvm
이라고 써 있는 걸 보실 수 있을 거예요.
한마디로 nvm
을 사용하려면 쉘을 재시작해야 한다는 소리입니다.
아무 nvm 커맨드나 한 번 실행해 보시면, 경고 문구가 뜨는 걸 보실 수 있을 거예요.
$ nvm ls
zsh: command not found: nvm
따라서 다음 커맨드를 사용해 쉘 환경을 재시작해줍니다.
# zsh 사용시
$ source ~/.zshrc
# bash 사용시
$ source ~/.bash_profile
이제 nvm
이 정상적으로 설치되었는지 확인해볼까요?
$ nvm --version
0.34.0
정상적으로 확인이 가능합니다.
일단 설치 명령어들은 다음과 같습니다.
install, uninstall 뒤에 인자로 오는 문자열은 version-like 이라면 모두 가능합니다. 예를 들면...
# node.js 버전 설치하기
$ nvm install 0.10
$ nvm install v0.1.2
$ nvm install v8
# node 최신 버전 설치 (설치 당시 기준)
$ nvm install node
# node LTS 최신버전 설치
$ nvm install --lts
기타 명령어들은 다음과 같습니다.
# 설치된 node.js 목록 확인하기
$ nvm ls
# 설치할 수 있는 모든 Node 버전 조회 (재미삼아 해보지마세요 겁나많음... 황급히 control C 두드리기)
$ nvm ls-remote
# 특정 버전의 node 사용하기
$ nvm use <version>
# 현재 사용중인 버전 확인하기
$ nvm current
# node.js 설치 경로 확인하기
$ which node
# 필요없는 node 버전 삭제하기
$ nvm uninstall <version>
만일 새로운 쉘을 실행할 경우 node
의 버전이 system
버전으로 리셋되는데요, 이를 고정하기 위한 커맨드는 다음과 같습니다.
$ nvm alias default 8.9.4
# 설치되어 있는 가장 최신버전의 node를 디폴트로 사용하기
$ nvm alias default node
터미널을 다시 시작해 확인해 보면 디폴트로 설정된 노드가 실행될 거예요.