개요
nvm은 Node.js 버전 관리자로, 명령줄에서 여러 활성 버전을 빠르게 설치하고 전환할 수 있습니다. bash, zsh, ksh, sh 등 POSIX 호환 shell을 지원하며, Unix, macOS 및 Windows WSL에 적용됩니다. .nvmrc 파일을 통한 프로젝트 수준 버전 관리를 지원하며, 오프라인 설치 및 미러 사용자 정의 등의 기능을 제공합니다.
README 미리보기
\n \n \n \n \n\n\n\n# Node Version Manager [][3] [][4] [](https://bestpractices.dev/projects/684)\n\n\n\n\n## Table of Contents\n\n- [Intro](#intro)\n- [About](#about)\n- [Installing and Updating](#installing-and-updating)\n - [Install & Update Script](#install--update-script)\n - [Additional Notes](#additional-notes)\n - [Installing in Docker](#installing-in-docker)\n - [Installing in Docker for CICD-Jobs](#installing-in-docker-for-cicd-jobs)\n - [Troubleshooting on Linux](#troubleshooting-on-linux)\n - [Troubleshooting on macOS](#troubleshooting-on-macos)\n - [Ansible](#ansible)\n - [Verify Installation](#verify-installation)\n - [Important Notes](#important-notes)\n - [Git Install](#git-install)\n - [Manual Install](#manual-install)\n - [Manual Upgrade](#manual-upgrade)\n- [Usage](#usage)\n - [Long-term Support](#long-term-support)\n - [Migrating Global Packages While Installing](#migrating-global-packages-while-installing)\n - [Migrating Global Packages Between Installed Versions](#migrating-global-packages-between-installed-versions)\n - [Offline Install](#offline-install)\n - [Default Global Packages From File While Installing](#default-global-packages-from-file-while-installing)\n - [io.js](#iojs)\n - [System Version of Node](#system-version-of-node)\n - [Listing Versions](#listing-versions)\n - [Setting Custom Colors](#setting-custom-colors)\n - [Persisting custom colors](#persisting-custom-colors)\n - [Suppressing colorized output](#suppressing-colorized-output)\n - [Restoring PATH](#restoring-path)\n - [Set default node version](#set-default-node-version)\n - [Use a mirror of node binaries](#use-a-mirror-of-node-binaries)\n - [Pass Authorization header to mirror](#pass-authorization-header-to-mirror)\n - [.nvmrc](#nvmrc)\n - [Deeper Shell Integration](#deeper-shell-integration)\n - [Calling `nvm use` automatically in a directory with a `.nvmrc` file](#calling-nvm-use-automatically-in-a-directory-w
FAQ (5)
문제 해결zsh에서 nvm.sh를 소싱할 때 발생하는 nvm 오류 "cdhist: error: unrecognized arguments: -q"를 해결하는 방법
이 문제는 cdhist의 사용자 정의 cd 셸 함수가 zsh의 내장 cd를 가리기 때문에 발생합니다. nvm은 zsh에서 cd -q를 실행하지만, cdhist는 -q 플래그를 지원하지 않아 NVM_DIR이 /가 됩니다.
사용자 정의 cd 함수를 우회하고 셸 내장 명령을 직접 호출하는 nvm_cd 수정 사항이 포함된 릴리스로 nvm을 업그레이드하세요.
즉시 적용 가능한 패치: ~/.nvm/nvm.sh를 열고 nvm_cd()를 찾아 다음과 같이 변경하세요:
nvm_cd() {
if nvm_is_zsh; then
builtin cd "$@"
else
command cd "$@"
fi
}
그런 다음 다시 로드하세요:
source ~/.nvm/nvm.sh
현재 셸에만 적용되는 임시 해결 방법:
unset -f cd
source ~/.nvm/nvm.sh
이렇게 하면 셸이 재시작될 때까지 cdhist의 cd 함수가 비활성화됩니다.
문제 해결nvm 설치 스크립트가 ~/.bashrc의 마지막 줄에 bash_completion을 추가하는 문제를 어떻게 해결하나요?
이 문제는 ~/.bashrc의 끝에 줄바꿈 문자가 없고 이미 nvm.sh와 일치하는 줄이 포함되어 있을 때 nvm v0.40.8의 설치 프로그램에서 발생하며, 완성(completion) 줄이 새 줄을 시작하지 않고 추가됩니다. 이를 해결하려면 ~/.bashrc를 열고 nvm 완성 스니펫을 별도의 줄로 옮기세요:
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
설치 프로그램을 다시 실행하기 전에 파일이 줄바꿈으로 끝나는지 확인하세요:
[ -n "$(tail -c1 ~/.bashrc)" ] && printf '\n' >> ~/.bashrc
그런 다음 최신 nvm 설치 프로그램을 다시 실행하세요. 최신 버전에는 줄바꿈으로 끝나지 않는 프로필에 내용을 추가하기 전에 줄바꿈을 먼저 작성하는 수정 사항이 포함되어 있습니다.
문제 해결별도의 Node.js 설치가 존재하지 않을 때 macOS에서 nvm의 "not compatible with the npm config prefix option" 오류를 어떻게 해결하나요?
이 문제는 macOS가 실제 폴더와 대소문자가 다른 홈 디렉터리 경로를 보고할 때 발생할 수 있으며, 흔히 Time Machine 복원이나 계정 마이그레이션 이후에 나타납니다. 예를 들어 $HOME은 /Users/mitch인데 실제 폴더는 /Users/Mitch인 경우입니다. 다음 명령어로 경로를 비교하세요:
echo "$HOME"
whoami
ls -ld /Users/*
대소문자가 다르면 홈 디렉터리 경로를 수정하세요:
1. Mac을 백업하고 해당 계정에서 로그아웃하세요.
2. **시스템 환경설정 → 사용자 및 그룹**으로 이동하세요.
3. 해당 사용자를 우클릭하고 **고급 옵션**을 선택하세요.
4. **홈 디렉터리**를 실제 대소문자가 반영된 경로(예: /Users/Mitch)로 설정하세요.
5. 저장한 후 Mac을 재시동하고 터미널을 다시 여세요.
6. nvm이 설치된 버전에 대해 여전히 prefix를 보고하는 경우 다음을 실행하세요:
nvm use --delete-prefix v14.5.0
v14.5.0을 nvm으로 설치한 Node 버전으로 바꾸세요. nvm을 업데이트하면 이 경우에 대한 개선된 경고가 표시될 수도 있습니다. 이 감지 문제는 nvm PR #2263에서 해결되었습니다.
문제 해결nvm이 zsh 시작을 느리게 하는 이유는 무엇이며, 지연 시간을 어떻게 줄일 수 있나요?
이 지연은 주로 nvm.sh가 소싱될 때 nvm이 자동으로 nvm use default를 실행하기 때문에 발생합니다. --no-use 옵션을 사용해 nvm을 소싱하여 해당 버전 선택을 지연시키세요.
~/.zshrc에서 다음을:
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
다음으로 교체하세요:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" --no-use
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"
셸을 재시작하세요:
exec zsh
해당 이슈의 벤치마크에서 일반 로딩은 약 303 ms가 걸렸고, --no-use는 셸 시작 시간을 약 75 ms로 줄였습니다. nvm 소싱 자체는 대략 44 ms가 소요되었고, 나머지 시간은 자동 기본 버전 선택에 사용되었습니다.
--no-use를 사용하는 경우 Node가 필요할 때 다음을 실행하세요:
nvm use default
또는 nvm, node, npm, npx가 처음 호출될 때만 nvm을 지연 로드(lazy-load)하세요:
export NVM_DIR="$HOME/.nvm"
_lazy_load_nvm() {
unset -f nvm node npm npx
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"
}
nvm() { _lazy_load_nvm; nvm "$@"; }
node() { _lazy_load_nvm; node "$@"; }
npm() { _lazy_load_nvm; npm "$@"; }
npx() { _lazy_load_nvm; npx "$@"; }
다음 명령으로 시작 시간을 측정하세요:
hyperfine --warmup 3 'zsh -i -c exit'문제 해결Windows 호스트에 Node.js/npm이 설치되어 있을 때 WSL에서 nvm 설치가 실패하는 이유는 무엇인가요?
**원인:** nvm의 설치 스크립트가 nvm_check_global_modules를 통해 npm을 호출합니다. WSL에서는 기본적으로 Windows 경로가 $PATH에 추가되므로, npm이 /mnt/c/Program Files/nodejs/npm으로 해석될 수 있습니다. 이는 Windows Node.js 설치에 함께 포함된 셸 스크립트로, Windows node.exe를 실행합니다. 이로 인해 설치가 깨집니다.
**해결 방법 1 — Windows PATH가 WSL로 유출되지 않도록 차단 (권장):**
1. WSL 내에서 /etc/wsl.conf를 생성하거나 편집합니다:
[interop]
appendWindowsPath = false2. Windows의 PowerShell에서
wsl --shutdown을 실행한 다음 WSL 터미널을 다시 엽니다.3. nvm 설치 스크립트를 다시 실행합니다.
**해결 방법 2 — 설치할 때만 Windows 경로를 일시적으로 제거:**
PATH=$(echo "$PATH" | tr ':' '\n' | grep -v '^/mnt/c' | paste -sd: -)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
which npm으로 확인하세요. /mnt/c/...를 가리키지 않아야 합니다. nvm 자체에서의 수정(Windows node.exe가 npm 옆에 있는 경우 npm 검사를 건너뛰는 방식)이 제안되었으므로, 릴리스된 후 nvm을 업그레이드해도 문제가 해결될 수 있습니다.