Node.js Version Controller


🚂 Motivation

프로젝트 별 nodejs 버전을 다르게 적용하는 과정을 자동화하고 싶었다.

⭐ What I Learned

기존에는 nvm을 사용해서 nodejs버전을 컨트롤했는데, 그냥 너무 귀찮아서 nvm에 default nodejs 버전을 설정해둔 후, 거의 모든 프로젝트에서 그 버전을 사용했었다. (16.13.0을 사용했는데, 지금 LTS버전은 20.18.0이란다….! 그래서 굉장히 예전걸 쓴 것 처럼 보이지만, 사실 1년전 LTS버전이다. 확실히 nodejs는 릴리즈가 빠르다.)

근데 새로운 버전이 많이 릴리즈 되었고, 새로운 곳에서는 새로운 nodejs버전을 사용하고 싶어서 한번 적용해보았다.

  1. nvm use
    • 프로젝트 루트 디렉토리에서 .nvmrc파일을 생성하여 사용하고 싶은 버전을 명시한 뒤, nvm use 명령어를 사용해 버전 적용
    • 다른 프로젝트를 왔다갔다 한 경우(vscode를 껐다 킨 경우) nvm use명령어를 다시 사용해줘야함
    • 매우매우매우 귀찮음.
  2. vscode setting.json 설정
    • setting.json에 아래와 같이 zsh쉘이 켜진 경우 “args”: [“-l”] 옵션을 통해 로컬의 .zshrc파일을 읽어 vscode 터미널에 적용
        "terminal.integrated.profiles.osx": {
                "zsh": {
                    "path": "zsh",
                    "icon": "terminal-zsh",
                    "args": ["-l"]
                }
            },
        "terminal.integrated.defaultProfile.osx": "zsh"
      
  3. .zshrc 파일 수정 및 적용(source .zshrc)
    • 아래와 같은 스크립트를 zshrc파일에 적용
    • 저의 경우 /Users/kong/workspace/Indivisual의 하위 디렉토리에서 프로젝트들을 모두 관리했습니다.
    • 위를 적용해주지 않으면 터미널의 모든 곳에서 cd를 할 때마다 nvm use명령어를 실행하기 때문에… 매우매우 느려져요
    • 저의 경우 .nvmrc파일이 하위의 하위 디렉토리에도 존재하기 때문에 그냥 Indivisual 하위 디렉토리면 모두 적용하도록 설정해뒀습니다.
        # 디렉토리를 변경할 때 .nvmrc 파일이 있으면 자동으로 Node.js 버전 변경
        autoload -U add-zsh-hook
        load-nvmrc() {
          local node_version="$(nvm version)"
          local nvmrc_path="$(nvm_find_nvmrc)"
          local current_dir="$(pwd)"
      		
          if [ -n "$nvmrc_path" ]; then
            local nvmrc_node_version=$(cat "$nvmrc_path")
            if [ "$nvmrc_node_version" != "$node_version" ]; then
              echo "Switching to version in .nvmrc: $nvmrc_node_version"
              nvm use
            fi
          elif [[ "$current_dir" == /Users/kong/workspace/Indivisual/* ]]; then
            # /Users/kong/workspace/Indivisual 하위 디렉토리에서만 기본 버전으로 전환
            if [ "$node_version" != "$(nvm version default)" ]; then
              echo "Reverting to nvm default version in $current_dir"
              nvm use default
            fi
          fi
        }
        add-zsh-hook chpwd load-nvmrc
        load-nvmrc
      

💭 Impression

생각했던 거 보다 nvm use의 명령어의 실행시간이 길어서 좀 아쉽다.

100만큼 만족할 걸 기대했는데 98만큼 만족한 느낌..? 2%가 부족한 느낌…!


© 2021. All rights reserved.

Powered by Hydejack v9.2.1