icon

메티의 블로그

프로젝트 별 node 버전 관리 방법 (NVM, .nvmrc)
프로젝트 별 node 버전 관리 방법 (NVM, .nvmrc)

프로젝트 별 node 버전 관리 방법 (NVM, .nvmrc)

Tags
node
날짜
Aug 20, 2024
상태
공개

개요

각 프로젝트 별로 node 버전을 따로 관리하고 싶은 경우가 많습니다. nvm 에서는 각 프로젝트 별 node 버전을 쉽게 관리 하도록 돕는 기능이 있습니다. .nvmrc 파일을 사용하는 것입니다.
 

.nvmrc 파일 사용법

각 프로젝트에 .nvmrc 파일을 사용해, 쉽게 프로젝트 별 node 버전을 관리 할 수 있습니다. 사용방법도 간단합니다. 프로젝트 루트 디렉터리(또는 그 상위 디렉터리)에 .nvmrc 파일을 만들고, 원하는 버전 또는 지원하는 특정 문자열을 적은 후 그 디렉터리에서 nvm use 명령어를 사용해주면 됩니다. 그래도 순차적으로 설명 해보겠습니다.

.nvmrc 파일 만들기

20.16.0
.nvmrc 파일 예시
$ echo "5.9" > .nvmrc $ echo "lts/*" > .nvmrc # to default to the latest LTS version $ echo "node" > .nvmrc # to default to the latest version
예시와 같이 lts/*, node 등을 사용하면 lts 최신 버전 또는 node 의 최신 버전을 자동으로 사용합니다.
원하는 프로젝트의 루트 디렉터리 또는 그 상위 디렉터리.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
이런 에러가 났습니다.
.zshrcnvm 관련 초기화 스크립트를 작성 할 때, 다음과 같이 작성했었는데, 이는 다른 글을 참고해 적었던 것이라 맞지 않았었습니다.
문제
#.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
이 스크립트가 nvm 초기화 스크립트 부분인데, 저에겐 /usr/local/opt/nvm 디렉터리가 없었기 때문에 해당 스크립트가 동작하지 않았었습니다.
문제 해결
[ -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
그래서 다음과 같이 $NVM_DIR 환경 변수에 맞게 동작하도록 전부를 변경해주었습니다.
 
다음과 같이 변경 후 source ~/.zshrc 를 통해 스크립트를 다시 실행해준다면 잘 동작하게 됩니다. $NVM_DIR 은 제 프라이버시를 위해 가려둔 값입니다. 개인적으로 따라하신다면 nvm.sh 파일이 있는 곳으로 설정을 변경 하셔야합니다.
 
이제는 cd 로 디렉터리를 옮기거나, vscode 에서 .nvmrc 파일이 있는 프로젝트를 들어가 터미널을 켜면 잘 노드 버전이 변경 됩니다. 이때, 각 shell 세션당 node 버전을 다르게 사용하기 때문에 두개의 프로젝트를 동시에 켜도 상관 없습니다. 세션마다 변경되게 될 거에요.
 

결론

  • .nvmrc 파일을 통해 각 프로젝트 별 노드 버전을 쉽게 공유하고, 자동으로 node 버전을 변경하도록 세팅 할 수 있다.
  • .nvmrc 파일을 프로젝트 루트 디렉터리 또는 상위 디렉터리에 추가하고 nvm installnvm 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 에러 해결 참고 이슈
 
연관 포스트가 없습니다.