• Feed
  • Explore
  • Ranking
/
/
    🍎 Mac

    nvm 으로 node 버전 관리하기 (+ 자동화)

    m
    morethanmin
    2024.07.21
    ·
    6 min read

    해당 아티클은 mac 기준으로 작성되었습니다. window의 경우에는 이 아티클을 참고해주세요.

    node를 사용해 개발하다보면 다양한 node 버전에서 개발이 필요한 경우가 있습니다. 실제로 여러 프로젝트를 살펴보면 .nvmrc 라는 파일에 node 버전이 표시되어있는 경우도 종종 볼 수 있는데요.

    이럴 때 사용할 수 있는 것이 바로 nvm(node version manager)입니다. nvm은 여러 버전의 node를 설치하고 실행할 수 있도록 도와주고, 또 .nvmrc 파일을 읽어들여 프로젝트에 맞는 node 버전을 자동으로 설정해줄 수도 있습니다.

    NVM 설치하기

    아래 커맨드를 터미널에 입력하여 nvm을 설치해봅시다. curl또는 wget또는 brew 통해 설치하시면 됩니다.

    curl

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

    wget

    wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

    brew

    brew install nvm

    환경변수 설정

    nvm을 설치하셨다면 환경 변수를 설정해야합니다. 본인의 터미널 환경에 맞게 ~/.bash_profile, ~/.zshrc, ~/.profile, ~/.bashrc 중 한곳으로 이동하여 아래 추가하시면 됩니다.

    export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

    이후 터미널을 재부팅하거나 아래 커맨드를 입력하면 환경변수가 적용됩니다.

    source ~/.bash_profile

    nvm 사용법

    가장 많이 사용하는 명령어 위주로 알아보겠습니다.

    • nvm ls: 현재 설치된 node 버전을 확인할 수 있습니다.

    • nvm use <version>: 특정 버전의 node를 사용합니다. 커맨드를 실행하는 디렉터리에 .nvmrc 를 통해 버전이 명시되어있다면 version을 생략할 수 있어요.

    • nvm install <version> : 특정 버전의 node를 설치합니다.

    • nvm uninstall <version> : 특정 버전의 node를 제거합니다.

    .nvmrc

    프로젝트 root에 .nvmrc파일을 생성하고 현재 노드버전을 입력해두면 해당 프로젝트에서 사용하는 node 버전을 명시해 둘 수 있고, nvm use를 통해 바로 해당 버전의 node를 사용할 수 있습니다.

    프로젝트별 node 버전 자동으로 적용하기

    현재 디렉터리에 .nvmrc 가 존재하는지 확인하고 있다면 nvm use를 자동으로 실행하는 스크립트를 적용시켜봅시다.

    script 사용하는 방법

    공식문서에 나와있는 스크립트를 사용하여 적용할 수 있습니다. bash와 zsh 터미널에 대한 스크립트를 제공하고 있습니다. 둘 중 본인이 사용하는 터미널에 맞는 스크립트를 적용하시면 됩니다.

    bash

    아래 코드를 $HOME/.bashrc에 입력후 저장해주면 됩니다.

    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

    # 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

    vsCode extension 사용하기

    만약 본인이 vsCode를 사용한다면 vsc-nvm 익스텐션을 사용할 수도 있습니다.

    해당 extension을 설치하고 vscode를 재부팅하면 바로 적용됩니다.







    - 컬렉션 아티클