nvm?
nvm이란 Node Version Manager로, Node.js의 버전을 관리하는 도구입니다. 회사에서 프로젝트를 하다보면 프로젝트별로 다른 Node 버전을 사용하고 있는 경우가 발생하는데 이럴때 사용할 버전을 쉽게 전환 할수 있도록 해줍니다.
설치
NVM문서
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
homebrew 사용
brew install nvm
추가로 안정화된 노드 최신 버전도 설치해볼께요
nvm install stable
사용방법
원하는 버전의 node 설치
nvm install [node version]
# 예시
nvm install v18
내컴퓨터에 설치된 node버전 확인
nvm ls
# or
nvm list
설치한 노드 버전 중 사용
nvm use [node version]
자동설정
위와 같이 기본 설정만을 해서 사용할경우 프로젝트별로 다른 node버전을 사용 할 경우가 생기는데 nvm은 shell별로 다른 node버전을 가져가도록 설정이 되어있어서 터미널을 새로 열때 default로 되어 있는 node 버전이 선택된 상태로 실행이 됩니다.
그래서 매번 nvm use 명령어를 사용해서 node버전을 변경 해줘야 합니다. 이러한 과정들을 자동설정을 통해서 줄여보겠습니다.
먼저 프로젝트 루트 위치에 .nvmrc 파일을 생성해 줍니다.
해당파일에 사용할 node 버전을 적어줍니다.
v18.19.0
위와 같이 설정을 하게 되면 nvm use 명령어만으로 node version없이 해당 버전이 적용됩니다.
물론 해당 node 버전을 일일히 기억하지 않아도 되서 편하지만 번거로운 것은 사실입니다. nvm use 명령어를 매번 입력해 주어야 하기 때문입니다. 많은 분들도 이러한 것에 불편함을 느끼셨는지 shell에 설정을 추가하여 사용할수 있도록 하는 방법이 있었습니다.
각자 사용하는 shell에 맞춰서 아래 가이드대로 실행하시면됩니다.
bash를 사용하는 경우
vi ~/.bachrc 를 실행하여 설정파일을 열고 아래의 내용을 입력후에 저장해줍니다.
cdnvm() {
command cd "$@" || return $?
nvm_path="$(nvm_find_up .nvmrc | command tr -d '\n')"
# If there are no .nvmrc file, use the default nvm version
if [[ ! $nvm_path = *[^[:space:]]* ]]; then
declare default_version
default_version="$(nvm version default)"
# If there is no default version, set it to `node`
# This will use the latest version on your machine
if [ $default_version = 'N/A' ]; then
nvm alias default node
default_version=$(nvm version default)
fi
# If the current version is not the default version, set it to use the default version
if [ "$(nvm current)" != "${default_version}" ]; then
nvm use default
fi
elif [[ -s "${nvm_path}/.nvmrc" && -r "${nvm_path}/.nvmrc" ]]; then
declare nvm_version
nvm_version=$(<"${nvm_path}"/.nvmrc)
declare locally_resolved_nvm_version
# `nvm ls` will check all locally-available versions
# If there are multiple matching versions, take the latest one
# Remove the `->` and `*` characters and spaces
# `locally_resolved_nvm_version` will be `N/A` if no local versions are found
locally_resolved_nvm_version=$(nvm ls --no-colors "${nvm_version}" | command tail -1 | command tr -d '\->*' | command tr -d '[:space:]')
# If it is not already installed, install it
# `nvm install` will implicitly use the newly-installed version
if [ "${locally_resolved_nvm_version}" = 'N/A' ]; then
nvm install "${nvm_version}";
elif [ "$(nvm current)" != "${locally_resolved_nvm_version}" ]; then
nvm use "${nvm_version}";
fi
fi
}
alias cd='cdnvm'
cdnvm "$PWD" || exit
zsh를 사용하는 경우
vi ~/.zshrc 를 실행하여 설정파일을 열고 아래의 내용을 입력후에 저장해줍니다.
# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
local nvmrc_path
nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then
local nvmrc_node_version
nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
if [ "$nvmrc_node_version" = "N/A" ]; then
nvm install
elif [ "$nvmrc_node_version" != "$(nvm version)" ]; then
nvm use
fi
elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then
echo "Reverting to nvm default version"
nvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
위와 같이 설정을 해주면 프로젝트로 이동했을때 nvm use 명령어를 실행하지 않아도 자동으로 버전을 변경하고 해당 버전이 설치되어 있지 않다면 설치까지 진행해줍니다.
자동설정을 통해서 쾌적한 개발환경 구성을 해봅시다.