OpenSource-Hub

nvm

CLI 도구

nvm-sh/nvm

여러 Node.js 버전을 관리하는 POSIX 호환 shell 스크립트.

개요

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 함수가 비활성화됩니다.

원본 Issue #3835
문제 해결
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 설치 프로그램을 다시 실행하세요. 최신 버전에는 줄바꿈으로 끝나지 않는 프로필에 내용을 추가하기 전에 줄바꿈을 먼저 작성하는 수정 사항이 포함되어 있습니다.

원본 Issue #3951
문제 해결
별도의 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에서 해결되었습니다.

원본 Issue #2261
문제 해결
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'

원본 Issue #3930
문제 해결
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 = false

2. 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을 업그레이드해도 문제가 해결될 수 있습니다.

원본 Issue #3700