최근에 여러 버전의 노드로 세팅된 프로젝트들을 작업하게 되어 nvm
을 사용해 노드 버전을 관리했습니다. 그런데 이 경우에 nvm
의 default 노드 버전과 다른 버전을 사용하는 프로젝트에서 VSCode의 내장 터미널을 열 때마다 nvm use xx
와 같은 명령어를 매번 입력해줘야 하는 불편함이 있었습니다. 또 프로젝트에서 git hooks
를 관리하기 위해 husky
를 사용중인데 VSCode의 소스 컨트롤 기능을 사용할 때 husky
가 적절한 노드 버전을 찾지 못해 VSCode의 소스 컨트롤 기능을 사용할 수 없었습니다. 이 문제를 해결하기 위해서 몇가지 필요한 설정에 대해 적어보려 합니다.
zsh
에서 .nvmrc
사용하도록 설정하기
저는 VSCode에서 기본 터미널로 zsh
를 사용중이기 때문에 zsh
설정을 해줘야 합니다. 아래 스크립트를 ~/.zshrc
파일에 작성해주면 zsh
가 실행될 때 디렉토리에 .nvmrc
파일이 존재할 경우에 nvm use
명령어를 자동으로 실행시켜 줍니다.
export NVM_DIR=~/.nvm
[ -s \"$NVM_DIR/nvm.sh\" ] && . \"$NVM_DIR/nvm.sh\"
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\"
\t\tnvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
husky에서 .nvmrc 사용하도록 설정하기
위와 비슷하게 ~/.huskyrc
파일을 생성해주고 다음 스크립트를 작성해줍니다.
source ~/.bash_profile
if test -f \".nvmrc\"; then
nvm use
fi
이러면 마찬가지로 디렉토리에 .nvmrc
파일이 존재할 때 husky
가 실행되기 전에 nvm use
를 실행합니다.