18P by xguru 4달전 | favorite | 댓글 4개
  • 주요 비교 항목: 크로스플랫폼, 초기 설정, 노드 버전 소스, 일일 사용량

Node Version Manager (NVM)

  • GitHub 리포지토리 별 75.2k로 Node 버전 관리에 가장 인기 있는 솔루션
  • 초기에 등장하여 커뮤니티에서 큰 인기를 얻었음
  • 완전한 Windows 지원은 없으며, GitBash, Cygwin, WSL 등에서 작동함
  • Windows용 별도 패키지인 nvm-windows가 있으나 NVM 자체는 아님
  • POSIX 쉘(bash, zsh)만 지원하여 Fish 등의 사용자는 제외됨
  • 설치는 간단한 명령어로 가능함
  • .nvmrc 파일을 통해 사용할 Node.js 버전을 이해할 수 있음
  • nvm use 명령어는 현재 쉘에서만 Node.js 버전을 설정하므로, 프로젝트 폴더를 떠나도 버전이 유지됨
  • 현재 쉘의 Node.js 버전과 프로젝트에 필요한 버전을 항상 인지해야 하는 부담이 있음
  • 수동으로 모든 Node.js 버전을 관리하는 것보다는 낫지만, 완벽한 통합과는 거리가 있음

N

  • GitHub 별 18.5k로 인기 있는 Node.js 버전 관리자
  • 크로스 플랫폼이 아니며, NVM보다 더 많은 제한이 있음
  • Windows 네이티브 쉘, Git for Windows Bash, Cygwin DLL에서 작동하지 않음
  • NPM이나 Brew를 통해 직접 설치하거나, sh 스크립트를 다운로드하여 설치할 수 있음
  • package.json의 "engines" 섹션에서 직접 Node 버전을 감지할 수 있음
  • 다른 프로젝트에 정확한 Node.js 버전을 사용하려면 직접 추적해야 하는 문제가 있음
  • "전역" Node.js 버전을 관리하므로, 쉘을 닫은 후에도 마지막 프로젝트에 사용한 Node 버전이 남아있음

Fast Node Manager (FNM)

  • Rust로 작성된 Node 버전 관리자로, GitHub 별 15.2k
  • 목록에서 첫 번째 크로스 플랫폼 Node 버전 관리자임
  • 다른 패키지 설치 없이 Windows에서 실행됨
  • 설치 과정이 명확하고 직관적임
  • 쉘마다 Node.js 버전을 관리하며, 프로젝트에 지정된 버전이 없는 경우 "기본" 버전을 사용함
  • 폴더 기반으로 Node.js 버전을 자동 전환하는 기능이 있으나, 설정이 필요함
  • 자동 전환이 제대로 작동하려면 필요한 Node.js 버전을 미리 설치해야 함
  • .node-version이나 .nvmrc 파일에서만 Node 버전을 감지할 수 있음

Volta

  • GitHub 별 10k로 버전 관리자 세계에서 라이징 스타
  • Rust로 작성되었으며, 크로스 플랫폼임
  • Unix 기반 시스템에서 설치 과정이 매끄러움
  • Node.js 버전을 설정할 때 추가 파일이 필요 없음
  • package.json에서 직접 설정을 가져옴
  • "engines" 섹션이 Volta 설정 바로 옆에 있어, 버전을 쉽게 동기화할 수 있음
  • 툴체인 관리가 가능하여, Node.js 버전뿐만 아니라 Yarn 버전까지 동적으로 전환할 수 있음
  • 설치 명령어를 실행할 때마다 Node.js와 Yarn 버전이 선언된 것과 일치하도록 보장함

PNPM

  • NPM이나 Yarn의 대안으로 여겨지지만, Node.js 버전도 관리할 수 있음
  • 크로스 플랫폼이며, 모든 플랫폼에서 동일한 Node.js 버전 관리 경험을 제공함
  • Node 버전 관리가 핵심 기능이 아니므로, NPM이나 Yarn과 함께 사용하기 어려움
  • PNPM으로 설치한 Node.js는 Corepack이 포함되지 않음
  • Node.js 버전을 전역으로만 관리할 수 있으며, 쉘마다 설정할 수 없음
  • 프로젝트 간 이동 시 Node.js 버전을 동적으로 전환하지 않으므로, 직접 추적해야 함

결론

  • Node.js 버전 관리자는 많은 발전을 거듭해 왔음
  • NVM은 가장 오래되고 인기 있는 솔루션이었으며, 여전히 그러함
  • 하지만 생태계는 진화하고 있으며, N, FNM, Volta 등 다양한 도구가 등장했음
  • 현재로서는 Volta가 가장 기능이 풍부하고 완벽한 Node.js 버전 관리자로 보임
  • Volta는 크로스 플랫폼이며, 일상적인 사용에서 매끄러운 경험을 제공하고, 프로젝트에서 사용하는 다른 도구들까지 관리해줌

따로 패키지로 관리하려고 배우는게 번거로워서 그냥 brew unlink && brew link node@14 이렇게 쓰고있네요.

모든 것이 너무 많아서 진지하게 배우고 싶은 마음이 "미약함"

예전 FileForge에서 윈도우용 실행파일 뒤적거리던것을 떠올리면, 편해도 이렇게 편해도 되는가 싶기는 함.

저는 버전 매니저에 기대하는 것이 성능이라기보다는 범용성인데요. 그런 면에서 https://github.com/asdf-vm/asdf 를 충분히 만족하면서 사용하고 있습니다. 플러그인에 따라 node 뿐 아니라 python, ruby, golang 등을 모두 관리할 수 있어서요. direnv plugin 도 잘 쓰고 있습니다.

Nodenv(https://github.com/nodenv/nodenv)도 제법 괜찮은 대안인데 언급이 없는 점이 아쉽네요. GitHub star 2.2k라 별로 유명하지 않다고 여겨져서 제외된 듯합니다.

셸 스크립트 기반이라 Windows 호환성이 취약한 건 NVM이나 N과 유사하고, 대신 글로벌 Node.js 버전과 별개로 폴더 기반으로 Node.js 버전을 지정할 수도, 특정 버전의 Node.js을 사용하는 셸 환경을 새로 띄울 수도 있습니다.