각 프로젝트 별로 node 버전을 따로 관리하고 싶은 경우가 많습니다. nvm 에서는 각 프로젝트 별 node 버전을 쉽게 관리 하도록 돕는 기능이 있습니다. .nvmrc 파일을 사용하는 것입니다.
.nvmrc 파일 사용법
각 프로젝트에
.nvmrc
파일을 사용해, 쉽게 프로젝트 별 node 버전을 관리 할 수 있습니다. 사용방법도 간단합니다. 프로젝트 루트 디렉터리(또는 그 상위 디렉터리)에 .nvmrc
파일을 만들고, 원하는 버전 또는 지원하는 특정 문자열을 적은 후 그 디렉터리에서 nvm use
명령어를 사용해주면 됩니다. 그래도 순차적으로 설명 해보겠습니다.- .nvmrc 파일 만들기
20.16.0
$ echo "5.9" > .nvmrc $ echo "lts/*" > .nvmrc # to default to the latest LTS version $ echo "node" > .nvmrc # to default to the latest version
원하는 프로젝트의 루트 디렉터리 또는 그 상위 디렉터리에
.nvmrc
파일을 만듭니다. (Linux, MacOS 등 POSIX 기반 OS 의 경우 예시의 echo 명령어를 그대로 사용해도 됩니다.)nvm use
명령어 사용하기
nvm use
명령어를 사용하면 현재 디렉터리부터 상위 디렉터리까지 .nvmrc
파일을 찾아서 그 파일에 적혀있는 버전을 자동으로 사용하게 됩니다. 버전 별로 상위 디렉터리에 .nvmrc
넣어두고 하위에는 프로젝트 폴더를 넣어 관리 할 수도 있겠네요.nvm install
명령어 사용하기
nvm install Found '/path/to/project/.nvmrc' with version <5.9> Downloading and installing node v5.9.1... Downloading https://nodejs.org/dist/v5.9.1/node-v5.9.1-linux-x64.tar.xz... #################################################################################### 100.0% Computing checksum with sha256sum Checksums matched! Now using node v5.9.1 (npm v3.7.3)
nvm install
명령어 사용 시, .nvmrc
파일에 해당하는 node 버전을 설치하게 됩니다.- 결론: .nvmrc 파일을 루트에 두고
nvm use
로 바꾸어가며 사용하자
이렇게 프로젝트 별 사용 방법을 알아보았는데요. 매번 작업 프로젝트를 변경 할 때 마다
nvm use
를 사용해 바꾸는게 불편할 수 있습니다. 그래서 nvm 에서는 shell 에 자동적으로 프로젝트에 들어갈 때 변경되도록 명령어에 스크립트를 추가할 수 있습니다.zsh 사용자 경우
$HOME/.zshrc
파일에 nvm 설정이 된 이후 스크립트에 다음과 같은 스크립트를 추가하면 됩니다.# 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 깃 레포 README 에 나와있는 스크립트 내용입니다. 이 스크립트 자체는 아주 잘 동작해요!
하지만 저는 nvm 설치 시 다른 블로그 글을 참고 했어서 저 스크립트와 초기 nvm 설치 시 설정에 어긋남이 있었습니다. 그래서 저는 nvm 가 스크립트에서 호출하는 함수들이 초기화가 제대로 이루어지지 않고 있었습니다.
load-nvmrc:2: command not found: nvm_find_nvmrc load-nvmrc:13: command not found: nvm_find_nvmrc
.zshrc 에 nvm 관련 초기화 스크립트를 작성 할 때, 다음과 같이 작성했었는데, 이는 다른 글을 참고해 적었던 것이라 맞지 않았었습니다.
문제
#.zshrc 파일 내용 일부 [ -s "/usr/local/opt/nvm/nvm.sh" ] && \. "/usr/local/opt/nvm/nvm.sh" # This loads nvm [ -s "/usr/local/opt/nvm/etc/bash_completion" ] && \. "/usr/local/opt/nvm/etc/bash_completion" # This loads nvm bash_completion [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
문제 해결
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/etc/bash_completion" ] && \. "$NVM_DIR/etc/bash_completion" # This loads nvm bash_completion [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
다음과 같이 변경 후
source ~/.zshrc
를 통해 스크립트를 다시 실행해준다면 잘 동작하게 됩니다.이제는 cd 로 디렉터리를 옮기거나, vscode 에서
.nvmrc
파일이 있는 프로젝트를 들어가 터미널을 켜면 잘 노드 버전이 변경 됩니다. 이때, 각 shell 세션당 node 버전을 다르게 사용하기 때문에 두개의 프로젝트를 동시에 켜도 상관 없습니다. 세션마다 변경되게 될 거에요.결론
- .nvmrc 파일을 통해 각 프로젝트 별 노드 버전을 쉽게 할 수 있다.
- .nvmrc 파일을 프로젝트 루트 디렉터리 또는 상위 디렉터리에 추가하고
nvm install
과nvm use
명령어로 수동적으로 node 버전을 변경해줄 수 있다.
nvm use
사용 시 .nvmrc 파일이 없다면 상위 디렉터리를 탐색하는 로직이 있다.
- 자동화 스크립트를 설정할 수 있다.
- .nvmrc 자동화 스크립트로 node 버전을 관리 해도 각 shell 세션당 node 버전을 다르게 사용하기 때문에 두개의 프로젝트를 동시에 작업해도 괜찮다.
출처
load-nvmrc:1: command not found: nvm
Updated Jul 4, 2023
load-nvmrc:2: command not found: nvm_find_nvmrc 에러 해결 참고 이슈