Node.js Version Controller
in Study
🚂 Motivation
프로젝트 별 nodejs 버전을 다르게 적용하는 과정을 자동화하고 싶었다.
⭐ What I Learned
기존에는 nvm을 사용해서 nodejs버전을 컨트롤했는데, 그냥 너무 귀찮아서 nvm에 default nodejs 버전을 설정해둔 후, 거의 모든 프로젝트에서 그 버전을 사용했었다. (16.13.0을 사용했는데, 지금 LTS버전은 20.18.0이란다….! 그래서 굉장히 예전걸 쓴 것 처럼 보이지만, 사실 1년전 LTS버전이다. 확실히 nodejs는 릴리즈가 빠르다.)
근데 새로운 버전이 많이 릴리즈 되었고, 새로운 곳에서는 새로운 nodejs버전을 사용하고 싶어서 한번 적용해보았다.
- nvm use
- 프로젝트 루트 디렉토리에서 .nvmrc파일을 생성하여 사용하고 싶은 버전을 명시한 뒤, nvm use 명령어를 사용해 버전 적용
- 다른 프로젝트를 왔다갔다 한 경우(vscode를 껐다 킨 경우) nvm use명령어를 다시 사용해줘야함
- 매우매우매우 귀찮음.
- 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"
- setting.json에 아래와 같이 zsh쉘이 켜진 경우 “args”: [“-l”] 옵션을 통해 로컬의 .zshrc파일을 읽어 vscode 터미널에 적용
- .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%가 부족한 느낌…!