🔎 Node Version 관리의 필요성
개발을 하다 보면 Node Version을 여러 개 관리해야 할 상황이 생긴다. 예를 들어, 프로젝트마다 Node 버전을 다르게 사용해야 할 경우가 있다. 또는 기존 프로젝트의 Node Version을 업데이트하면서 다른 의존성 라이브러리와의 충돌을 체크하며 마이그레이션해야 하는 경우가 있다.
✅ 배경
Node Version 관리가 필요해진 이유는 기존 프로젝트에 테스트 코드를 적용을 하기 위해서이다.
현재 실무에서 진행하는 프로젝트는 Node v10.16.0을 사용하고 있다. 해당 프로젝트에 테스팅 라이브러리인 Jest를 사용해서 테스트 코드를 적용하려고 시도했으나, import 할 때부터 에러가 발생하고 순탄하지 않아서 Jest 공식 문서를 확인해 보니 Node Version 호환성 관련된 내용이 있었다. 참고로 현재 Jest의 Stable Version은 v29.5이므로 해당 버전과 그 이전 버전을 기준으로 삼았다.
- Jest v28 -> 29로 업그레이드 시: 호환되는 Node Version은 14.15, 16.10, 18.0, 그리고 그 이상이다.
- Jest v27 -> 28로 업그레이드 시: 호환되는 Node Version은 12.13, 14.15, 16.10 그리고 그 이상이다. Type 정의를 사용하고자 하는 경우 TypeScript v4.3 이상을 설치해야 한다.
따라서 Jest를 안정적으로 적용하기 위해서는 Node 버전 관리가 필요하다고 판단하여, Node Version을 16.10을 추가로 설치하고자 하였다.
1️⃣ NVM 설치 & .zshrc 세팅
MacOS 기준으로 세팅하였고, Homebrew가 설치되어 있는 상태에서 진행하였다.
brew install nvm
이제 nvm 사용하기 위해서는 .zshrc를 생성해서 그 안에 환경변수 경로를 세팅해주어야 한다. 우선 생성을 해보자.
cd ~
vim .zshrc
그 다음에는 환경변수 경로를 세팅하고 저장해 주자.
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh
여기까지 완료했다면 터미널을 재시작하고, nvm 설치를 확인해 보자.
nvm --version
2️⃣ NVM으로 Node version 설치
nvm 설치가 잘 되었다면, 이제는 node version을 설치하면 된다.
nvm install node // 최신 Node version 설치
nvm install --lts // 최신 lts Node version 설치
nvm install 16.10.0 // 특정 Node version 설치
잘 설치되었는지 확인하기 위해 Node version 명령어를 실행한다.
nvm ls
3️⃣ NVM으로 Node version 변경
여러 버전을 설치했다면 다음 명령어로 그 중 내가 원하는 Node Version으로 변경할 수 있다.
nvm use 16.10.0
참고: 실수로 잘못 설치했다면 원하지 않는 버전은 다음 명령어로 삭제할 수 있다.
nvm uninstall 16.10.0
4️⃣ .nvmrc로 프로젝트 별 Node version 관리하기
Local에 여러 버전의 Node를 설치해보았다. 이어서 프로젝트별로 Node version을 관리하려면 각 프로젝트에 .nvmrc를 생성하여 버전을 입력해 주면 된다.
// .nvmrc
16.10.0
.nvmrc 을 세팅해 주었다면, 해당 파일이 있는 디렉터리에서 다음 명령어를 실행하여 세팅한 Node Version을 사용할 수 있다.
nvm use
✍🏻 마무리
이제 원하는 Stable한 Node Version으로 테스트 코드를 적용할 수 있는 환경이 되었다. 물론 다시 이전 버전으로 돌아가고 싶다면 언제든 변경이 가능하다. 프로젝트에서 사용 중인 라이브러리들의 deprecated 여부를 확인하여 Node version에 따라 새 라이브러리로 변경하거나 업데이트 할 때에도, 또는 프로젝트 자체 Node version을 업데이트 할 때에도 Prod 환경에 안정적으로 적용할 수 있고 유용할 것 같다.
참고
https://jestjs.io/docs/upgrading-to-jest29
https://jestjs.io/docs/28.x/upgrading-to-jest28
'Programming > JavaScript' 카테고리의 다른 글
[JavaScript] Moment.js 사용법 (현재 날짜, 날짜 포맷, 날짜 비교) (0) | 2023.06.23 |
---|---|
[JavaScript] e.preventDefault()와 e.stopPropagation()의 차이점 (2) | 2023.01.05 |
[JavaScript] Set 사용법 (0) | 2020.03.23 |
[Node.js] Node.js 입력 받는 방법, 표준입출력 (0) | 2020.03.18 |
[jQuery] jQuery 요소 찾기, 텍스트 바꾸기, 요소 변경/생성 (0) | 2019.12.22 |
댓글