18P by xguru 6달전 | 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에서 윈도우용 실행파일 뒤적거리던것을 떠올리면, 편해도 이렇게 편해도 되는가 싶기는 함.

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

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

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