Node 버전 관리자 5종 비교 : NVM, N, FNM, Volta, PNPM
(pavel-romanov.com)- 주요 비교 항목: 크로스플랫폼, 초기 설정, 노드 버전 소스, 일일 사용량
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는 크로스 플랫폼이며, 일상적인 사용에서 매끄러운 경험을 제공하고, 프로젝트에서 사용하는 다른 도구들까지 관리해줌
저는 버전 매니저에 기대하는 것이 성능이라기보다는 범용성인데요. 그런 면에서 https://github.com/asdf-vm/asdf 를 충분히 만족하면서 사용하고 있습니다. 플러그인에 따라 node 뿐 아니라 python, ruby, golang 등을 모두 관리할 수 있어서요. direnv plugin 도 잘 쓰고 있습니다.
모든 것이 너무 많아서 진지하게 배우고 싶은 마음이 "미약함"
예전 FileForge에서 윈도우용 실행파일 뒤적거리던것을 떠올리면, 편해도 이렇게 편해도 되는가 싶기는 함.