NVM과 함께 VSCode, husky 사용하기


최근에 여러 버전의 노드로 세팅된 프로젝트들을 작업하게 되어 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를 실행합니다.