nvm - NodeVersionManager-複数のアクティブなnode.jsバージョンを管理するためのPOSIX準拠のbashスクリプト

(Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions)

Created at: 2010-04-16 01:47:47
Language: Shell
License: MIT

nvmプロジェクトのロゴ

ノードバージョンマネージャービルドステータス nvmバージョン CIIのベストプラクティス

目次

イントロ

nvm
コマンドラインからさまざまなバージョンのノードをすばやくインストールして使用できます。

例:

$ nvm use 16
Now using node v16.9.1 (npm v7.21.1)
$ node -v
v16.9.1
$ nvm use 14
Now using node v14.18.0 (npm v6.14.15)
$ node -v
v14.18.0
$ nvm install 12
Now using node v12.22.6 (npm v6.14.5)
$ node -v
v12.22.6

そのような単純な!

nvmはnode.jsのバージョンマネージャーであり、ユーザーごとにインストールされ、シェルごとに呼び出されるように設計されています。

nvm
POSIX準拠のシェル(sh、dash、ksh、zsh、bash)、特にこれらのプラットフォーム(unix、macOS、およびwindows WSL )で動作します。

インストールと更新

スクリプトのインストールと更新

nvmをインストールまたは更新するには、インストールスクリプトを実行する必要があります。これを行うには、スクリプトを手動でダウンロードして実行するか、次のcURLまたはWgetコマンドを使用します。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

上記のコマンドのいずれかを実行すると、スクリプトがダウンロードされて実行されます。スクリプトはnvmリポジトリのクローンを作成し

~/.nvm
、以下のスニペットのソース行を正しいプロファイルファイル(、、、、または)に追加しよう
~/.bash_profile
とし
~/.zshrc
ます。
~/.profile
~/.bashrc

export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

その他の注意事項

  • 環境変数

    $XDG_CONFIG_HOME
    が存在する場合は、
    nvm
    そこにファイルが配置されます。

  • --no-use
    上記のスクリプト(...)の最後に追加して、手動で
    nvm.sh --no-use
    使用するまで使用を延期できます。
    nvm
    use

  • 、、、および変数を使用して

    NVM_SOURCE
    、インストールソース、ディレクトリ、プロファイル、およびバージョンをカスタマイズできます。例:。に末尾のスラッシュが含まれていないことを確認してください。
    NVM_DIR
    PROFILE
    NODE_VERSION
    curl ... | NVM_DIR="path/to/nvm"
    NVM_DIR

  • インストーラーは

    git
    、、、
    curl
    または
    wget
    ダウンロード
    nvm
    のいずれか利用可能な方を使用できます。

Linuxでのトラブルシューティング

Linuxでは、インストールスクリプトを実行した後、

nvm: command not found
入力後にターミナルからフィードバックが表示されない場合は
command -v nvm
、現在のターミナルを閉じて新しいターミナルを開き、もう一度確認してください。または、コマンドラインでさまざまなシェルに対して次のコマンドを実行することもできます。

bash

source ~/.bashrc

zsh

source ~/.zshrc

ksh

. ~/.profile

これらは

nvm
コマンドを取得する必要があります。

macOSでのトラブルシューティング

OS X 10.9以降

/usr/bin/git
、Xcodeコマンドラインツールによって事前設定されています。つまり、Gitがインストールされているかどうかを正しく検出できません。インストールスクリプトを実行する前に、Xcodeコマンドラインツールを手動でインストールする必要があります。そうしないと、失敗します。(#1782を参照)

インストールスクリプトを実行した後に取得した場合

nvm: command not found
は、次のいずれかが原因である可能性があります。

  • macOS 10.15以降、デフォルトのシェルは

    zsh
    であり、nvmは更新を探しますが、デフォルト
    .zshrc
    では何もインストールされていません。で作成し
    touch ~/.zshrc
    、インストールスクリプトを再度実行します。

  • 以前のデフォルトシェルであるbashを使用する場合

    .bash_profile
    、コマンドが設定されているファイルがシステムにない可能性があります。で作成し
    touch ~/.bash_profile
    、インストールスクリプトを再度実行します。次に、を実行
    source ~/.bash_profile
    して
    nvm
    コマンドを取得します。

  • 以前に使用

    bash
    したことがありますが、
    zsh
    インストールしました。これらの行を手動でに追加し
    ~/.zshrc
    て実行する必要があります
    . ~/.zshrc

  • ターミナルインスタンスを再起動するか、を実行する必要がある場合があります

    . ~/.nvm/nvm.sh
    。ターミナルを再起動するか、新しいタブ/ウィンドウを開くか、sourceコマンドを実行すると、コマンドと新しい構成がロードされます。

  • 上記が役に立たなかった場合は、ターミナルインスタンスを再起動する必要があるかもしれません。ターミナルで新しいタブ/ウィンドウを開いて、再試行してください。

上記で問題が解決しない場合は、次のことを試してください。

  • bashを使用している場合は、

    .bash_profile
    (または)が適切
    ~/.profile
    にソースを提供していない可能性があります。これを追加するか、以下の次の手順に従って
    ~/.bashrc
    修正できます。
    source ~/<your_profile_file>

  • 正しいnvmディレクトリを見つけてnvmをロードするインストールセクションのスニペットを

    ~/.bash_profile
    通常のプロファイル( 、、、、または)
    ~/.zshrc
    に追加してみてください。
    ~/.profile
    ~/.bashrc

  • この問題と考えられる回避策の詳細については、こちらを参照してください

M1チップを搭載したMacの場合、ノードはv16.0.0以降でarm64archdarwinパッケージの提供を開始しました。以前のバージョンでは、利用可能なdarwin_x64パッケージのみがあり、darwin_arm64はありませんでした。を使用してノードをインストールする際に問題が発生した場合は

nvm
、v16以降に更新することをお勧めします。

Ansible

次のタスクを使用できます。

- name: nvm
  shell: >
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
  args:
    creates: "{{ ansible_env.HOME }}/.nvm/nvm.sh"

インストールの確認

nvmがインストールされていることを確認するには、次の手順を実行します。

command -v nvm

nvm
インストールが成功した場合に出力されます。は実行可能なバイナリではなく、ソースシェル関数であるため、機能し
which nvm
ないことに注意してください。
nvm

注: Linuxでは、インストールスクリプトを実行した後、

nvm: command not found
入力後にターミナルからフィードバックが表示されない場合は
command -v nvm
、現在のターミナルを閉じて新しいターミナルを開き、もう一度確認してください。

重要な注意事項

事前にパッケージ化されたバイナリが利用できないシステムを実行している場合、つまりソースコードからnodejsまたはio.jsをインストールする場合は、システムにC++コンパイラがあることを確認する必要があります。OS Xの場合、Xcodeが機能し、Debian/UbuntuベースのGNU/Linuxの場合、

build-essential
および
libssl-dev
パッケージが機能します。

注:

nvm
場合によってはWindowsもサポートします。WSLのバージョンに応じて、WSL(Windows Subsystem for Linux)を介して動作するはずです。また、GitBash(MSYS)またはCygwinでも機能するはずです。それ以外の場合、Windowsの場合、いくつかの代替手段が存在しますが、これらはサポートも開発もされていません。

注: Fish

nvm
もサポートしていません(#303を参照)。私たちによってサポートも開発もされていない代替案が存在します:

  • 低音を使用すると、魚の殻でBash用に作成されたユーティリティを使用できます
  • fast-nvm-fishはバージョン番号(エイリアスではない)でのみ機能しますが、シェルの起動を大幅に遅くすることはありません
  • plugin- Oh My Fish用のnvmプラグイン。これにより、nvmとその補完がfishshellで利用できるようになります。
  • fnm-魚の漁師ベースのバージョンマネージャー
  • fish-nvm-魚のnvmの周りのラッパーで、実際に使用されるまでnvmの調達を遅らせます。

注: FreeBSDにはまだ公式のビルド済みバイナリがなく、ソースからビルドするにはパッチが必要な場合があるため、FreeBSDにはまだいくつかの問題があります。発行チケットを参照してください。

注: OS Xでは、Xcodeがインストールされておらず、最大4.3GBのファイルをダウンロードしたくない場合は、をインストールできます

Command Line Tools
。その方法については、このブログ投稿を確認してください。

注: OS Xで、「システム」ノードがインストールされている/インストールされていて、モジュールをグローバルにインストールする場合は、次の点に注意してください。

  • を使用する場合は、を使用してモジュールをグローバルにインストールする
    nvm
    必要はありません。そのため、を実行する代わりに、を実行してください。
    sudo
    npm -g
    sudo npm install -g grunt
    npm install -g grunt
  • ファイルがある場合は、設定
    ~/.npmrc
    が含まれていないことを確認してください
    prefix
    (と互換性がありません
    nvm
  • 以前の「システム」ノードのインストールを維持することはできますが(すべきではありませんか?)
    nvm
    、ユーザーアカウント(nvmのインストールに使用されたアカウント)でのみ使用できます。
    /usr/local/lib/node_modules/*
    他のユーザーがVSを使用しているため、これによりバージョンの不一致が発生する可能性があります。
    ~/.nvm/versions/node/vX.X.X/lib/node_modules/*

自作のインストールはサポートされていません。自作インストールで問題が発生した場合は、問題を提出する前に、それを実行し、以下の手順を使用してインストールして

nvm
ください。
brew uninstall

注:使用している場合は、zshプラグインとして

zsh
簡単にインストールできます。
nvm
インストール
zsh-nvm
して実行
nvm upgrade
し、アップグレードします。

注: v1.7より前のGitバージョンで

nvm
は、httpsプロトコルを介してGitHubからソースを複製する問題が発生する可能性があります。また、v1.6より前のgitの動作も異なり、v1.17.10より前のgitはタグを複製できないため、最低限必要なものがあります。 gitバージョンはv1.7.10です。ここで説明した問題に関心がある場合は、GitHubのHTTPSクローン作成エラーの記事を参照してください。

Gitインストール

インストールしている場合

git
(git v1.7.10 +が必要):

  1. このリポジトリをユーザープロファイルのルートに複製します
  • cd ~/
    どこからでも
    git clone https://github.com/nvm-sh/nvm.git .nvm
  1. cd ~/.nvm
    と最新バージョンをチェックしてください
    git checkout v0.39.1
  2. シェルから調達してアクティブ化
    nvm
    します。
    . ./nvm.sh

次に、これらの行を

~/.bashrc
、、、
~/.profile
または
~/.zshrc
ファイルに追加して、ログイン時に自動的に供給されるようにします:(上記のファイルの複数に追加する必要がある場合があります)

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

手動インストール

nvm
完全に手動でインストールするには、次の行を実行して、最初にリポジトリのクローンを作成して
$HOME/.nvm
から、ロードします
nvm

export NVM_DIR="$HOME/.nvm" && (
  git clone https://github.com/nvm-sh/nvm.git "$NVM_DIR"
  cd "$NVM_DIR"
  git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`
) && \. "$NVM_DIR/nvm.sh"

次に、これらの行を

~/.bashrc
、、、
~/.profile
または
~/.zshrc
ファイルに追加して、ログイン時に自動的に供給されるようにします:(上記のファイルの複数に追加する必要がある場合があります)

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

手動アップグレード

手動アップグレードの

git
場合(git v1.7.10 +が必要):

  1. に変更します
    $NVM_DIR
  2. 最新の変更をプルダウンします
  3. 最新バージョンをチェックしてください
  4. 新しいバージョンをアクティブ化する
(
  cd "$NVM_DIR"
  git fetch --tags origin
  git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`
) && \. "$NVM_DIR/nvm.sh"

使用法

nodeの最新リリースをダウンロード、コンパイル、およびインストールするには、次のようにします。

nvm install node # "node" is an alias for the latest version

特定のバージョンのノードをインストールするには:

nvm install 14.7.0 # or 16.3.0, 12.22.1, etc

インストールされた最初のバージョンがデフォルトになります。新しいシェルは、ノードのデフォルトバージョンで開始されます(例:)

nvm alias default

以下を使用して、利用可能なバージョンを一覧表示できます

ls-remote

nvm ls-remote

そして、新しいシェルでは、インストールされているバージョンを使用するだけです。

nvm use node

または、実行することもできます。

nvm run node --version

または、ノードの目的のバージョンを使用して、サブシェルで任意のコマンドを実行できます。

nvm exec 4.2 node --version

また、実行可能ファイルがインストールされた場所へのパスを取得することもできます。

nvm which 12.22

「14.7」、「16.3」、「12.22.1」などのバージョンポインタの代わりに、、、、、などの特別なデフォルトエイリアスを使用でき

nvm install
ます。
nvm use
nvm run
nvm exec
nvm which

  • node
    :これは最新バージョンをインストールします
    node
  • iojs
    :これは最新バージョンをインストールします
    io.js
  • stable
    node
    v0.12
    :このエイリアスは非推奨であり、実際にはそれ以前にのみ適用されます。現在、これはのエイリアスです
    node
  • unstable
    node
    v0.11
    :このエイリアスは-1.0以降の最後の「不安定な」ノードリリースを指します。すべてのノードバージョンは安定しています。(SemVerでは、バージョンは安定性ではなく破損を伝えます)。

長期サポート

ノードには長期サポート(LTS)のスケジュールがあります。たとえば、最新のLTSの表記、および「アルゴン」行からのLTSリリース

.nvmrc
の表記を使用して、エイリアスおよびファイルでLTSバージョンを参照できます。さらに、次のコマンドはLTS引数をサポートします。
lts/*
lts/argon

  • nvm install --lts
    /
    nvm install --lts=argon
    /
    nvm install 'lts/*'
    /
    nvm install lts/argon
  • nvm uninstall --lts
    /
    nvm uninstall --lts=argon
    /
    nvm uninstall 'lts/*'
    /
    nvm uninstall lts/argon
  • nvm use --lts
    /
    nvm use --lts=argon
    /
    nvm use 'lts/*'
    /
    nvm use lts/argon
  • nvm exec --lts
    /
    nvm exec --lts=argon
    /
    nvm exec 'lts/*'
    /
    nvm exec lts/argon
  • nvm run --lts
    /
    nvm run --lts=argon
    /
    nvm run 'lts/*'
    /
    nvm run lts/argon
  • nvm ls-remote --lts
    //
    nvm ls-remote --lts=argon
    nvm ls-remote 'lts/*'
    _
    nvm ls-remote lts/argon
  • nvm version-remote --lts
    /
    nvm version-remote --lts=argon
    /
    nvm version-remote 'lts/*'
    /
    nvm version-remote lts/argon

のローカルコピーがhttps://nodejs.org

nvm
に接続するたびに、使用可能なすべてのLTS回線に適切なローカルエイリアスが再作成されます。これらのエイリアス(の下に保存されている)はによって管理されており、これらのファイルを変更、削除、または作成しないでください。変更が取り消されることを期待し、これらのファイルをいじると、サポートされない可能性のあるバグが発生することを期待してください。
$NVM_DIR/alias/lts
nvm

ノードの最新のLTSバージョンを取得し、既存のインストール済みパッケージを移行するには、次を使用します。

nvm install 'lts/*' --reinstall-packages-from=current

インストール中のグローバルパッケージの移行

Node.jsの新しいバージョンをインストールし、以前のバージョンからnpmパッケージを移行する場合:

nvm install node --reinstall-packages-from=node

これは、最初に「nvm version node」を使用して、パッケージの移行元の現在のバージョンを識別します。次に、リモートサーバーからインストールする新しいバージョンを解決してインストールします。最後に、「nvmreinstall-packages」を実行して、以前のバージョンのNodeから新しいバージョンにnpmパッケージを再インストールします。

次のように、ノードの特定のバージョンからnpmパッケージをインストールして移行することもできます。

nvm install 6 --reinstall-packages-from=5
nvm install v4.2 --reinstall-packages-from=iojs

パッケージを明示的に再インストールしてもnpmバージョンは更新されないことに注意してください。これは、npmが新しいノードバージョンの壊れたバージョンに誤ってアップグレードされないようにするためです。

npmを同時に更新するには

--latest-npm
、次のようにフラグを追加します。

nvm install 'lts/*' --reinstall-packages-from=default --latest-npm

または、いつでも次のコマンドを実行して、現在のノードバージョンでサポートされている最新のnpmバージョンを取得できます。

nvm install-latest-npm

「npmはNode.jsをサポートしていません」というエラーがすでに発生している場合は、(1)以前のノードバージョンに戻す(

nvm ls
nvm use <your latest _working_ version from the ls>
、(2)新しく作成されたノードバージョンを削除する(
nvm uninstall <your _broken_ version of node from the ls>
) )必要があります。 、次に(3)フラグ
nvm install
を使用して再実行します。
--latest-npm

インストール中のファイルからのデフォルトのグローバルパッケージ

新しいバージョンをインストールするたびにインストールするデフォルトパッケージのリストがある場合は、それもサポートしています。パッケージ名を1行に1つずつファイルに追加するだけです

$NVM_DIR/default-packages
。コマンドラインで、npmがパッケージ引数として受け入れるものなら何でも追加できます。

# $NVM_DIR/default-packages

rimraf
object-inspect@1.0.2
stevemao/left-pad

io.js

io.jsをインストールしたい場合:

nvm install iojs

新しいバージョンのio.jsをインストールし、npmパッケージを以前のバージョンから移行する場合:

nvm install iojs --reinstall-packages-from=iojs

ノード内のnpmパッケージの移行について説明したのと同じガイドラインがio.jsに適用されます。

ノードのシステムバージョン

システムにインストールされたバージョンのノードを使用する場合は、特別なデフォルトのエイリアス「system」を使用できます。

nvm use system
nvm run system --version

バージョンの一覧表示

インストールされているバージョンを確認する場合:

nvm ls

インストールできるバージョンを確認したい場合:

nvm ls-remote

カスタムカラーの設定

バージョンとエイリアスの情報を表示するために使用される5つの色を設定できます。これらの色は、デフォルトの色を置き換えます。初期色は次のとおりです:gbyre

カラーコード:

r/R = red / bold red

g/G = green / bold green

b/B = blue / bold blue

c/C = cyan / bold cyan

m/M = magenta / bold magenta

y/Y = yellow / bold yellow

k/K = black / bold black

e/W = light grey / white
nvm set-colors rgBcm

永続的なカスタムカラー

シェルの終了後もカスタムカラーを保持する

NVM_COLORS
場合は、シェルプロファイルで変数をエクスポートします。たとえば、シアン、マゼンタ、グリーン、ボールドレッド、ボールドイエローを使用する場合は、次の行を追加します。

export NVM_COLORS='cmgRY'

カラー化された出力の抑制

nvm help (or -h or --help)
、、および通常は色付きの出力
nvm ls
を生成します。オプションを使用して(または環境変数を設定することにより)色を無効にできます。
nvm ls-remote
nvm alias
--no-colors
TERM=dumb

nvm ls --no-colors
nvm help --no-colors
TERM=dumb nvm ls

パスの復元

PATHを復元するには、次の方法で無効にします。

nvm deactivate

デフォルトのノードバージョンを設定する

新しいシェルで使用されるデフォルトのノードバージョンを設定するには、エイリアス「default」を使用します。

nvm alias default node

ノードバイナリのミラーを使用する

ノードバイナリのミラーを使用するには、次のように設定し

$NVM_NODEJS_ORG_MIRROR
ます。

export NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist
nvm install node

NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist nvm install 4.2

io.jsバイナリのミラーを使用するには、次のように設定し

$NVM_IOJS_ORG_MIRROR
ます。

export NVM_IOJS_ORG_MIRROR=https://iojs.org/dist
nvm install iojs-v1.0.3

NVM_IOJS_ORG_MIRROR=https://iojs.org/dist nvm install iojs-v1.0.3

nvm use
デフォルトでは、「現在の」シンボリックリンクは作成されません。この動作を有効にするには、「true」に設定
$NVM_SYMLINK_CURRENT
します。これは、IDEで役立つ場合があります。
nvm
この環境変数を有効にして複数のシェルタブで使用すると、競合状態が発生する可能性があることに注意してください。

.nvmrc

プロジェクトのルートディレクトリ(または任意の親ディレクトリ)に、ノードのバージョン番号(または理解

.nvmrc
できるその他の文字列。詳細を参照)を含むファイルを作成できます。その後、、、、、、およびは、コマンドラインでバージョンが指定されていない場合、ファイルで指定されたバージョンを使用します。
nvm
nvm --help
nvm use
nvm install
nvm exec
nvm run
nvm which
.nvmrc

たとえば、nvmをデフォルトで最新の5.9リリース、最新のLTSバージョン、または現在のディレクトリの最新のノードバージョンにするには、次のようにします。

$ echo "5.9" > .nvmrc

$ echo "lts/*" > .nvmrc # to default to the latest LTS version

$ echo "node" > .nvmrc # to default to the latest version

[注:これらの例は、POSIX準拠のシェルバージョンを想定してい

echo
ます。
cmd
Windows開発環境を使用している場合、たとえば
.nvmrc
ファイルがリモートLinuxデプロイメントの構成に使用されている場合は、
"
がコピーされて無効なファイルになることに注意してください。それらを削除します。]

次に、nvmを実行すると:

$ nvm use
Found '/path/to/project/.nvmrc' with version <5.9>
Now using node v5.9.1 (npm v3.7.3)

nvm use
et。al。ファイルを探して、現在のディレクトリから上向きにディレクトリ構造をトラバースし
.nvmrc
ます。言い換えれば、実行中など
nvm use
。al。が付いているディレクトリのサブディレクトリにあると、そのサブディレクトリ
.nvmrc
.nvmrc
使用されます。

.nvmrc
ファイルの内容は、(で説明されているように)後に改行を付ける必要があります。末尾のスペースは許可されておらず、末尾の改行が必要です。
<version>
nvm --help

より深いシェル統合

を使用

avn
してシェルに深く統合し、
nvm
ディレクトリを変更するときに自動的に呼び出すことができます。メンテナ
avn
はサポートしていません。チームに問題を報告して
nvm
ください。
avn

より軽量なソリューションを好む場合は、以下のレシピが

nvm
ユーザーによって提供されています。それらはメンテナによってサポートされていません。
nvm
ただし、他の例についてはプルリクエストを受け付けています。

bash

自動的に呼び出す
nvm use

あなたの最後に以下を入れてください

$HOME/.bashrc

cdnvm() {
    command cd "$@";
    nvm_path=$(nvm_find_up .nvmrc | tr -d '\n')

    # If there are no .nvmrc file, use the default nvm version
    if [[ ! $nvm_path = *[^[:space:]]* ]]; then

        declare default_version;
        default_version=$(nvm version default);

        # If there is no default version, set it to `node`
        # This will use the latest version on your machine
        if [[ $default_version == "N/A" ]]; then
            nvm alias default node;
            default_version=$(nvm version default);
        fi

        # If the current version is not the default version, set it to use the default version
        if [[ $(nvm current) != "$default_version" ]]; then
            nvm use default;
        fi

    elif [[ -s $nvm_path/.nvmrc && -r $nvm_path/.nvmrc ]]; then
        declare nvm_version
        nvm_version=$(<"$nvm_path"/.nvmrc)

        declare locally_resolved_nvm_version
        # `nvm ls` will check all locally-available versions
        # If there are multiple matching versions, take the latest one
        # Remove the `->` and `*` characters and spaces
        # `locally_resolved_nvm_version` will be `N/A` if no local versions are found
        locally_resolved_nvm_version=$(nvm ls --no-colors "$nvm_version" | tail -1 | tr -d '\->*' | tr -d '[:space:]')

        # If it is not already installed, install it
        # `nvm install` will implicitly use the newly-installed version
        if [[ "$locally_resolved_nvm_version" == "N/A" ]]; then
            nvm install "$nvm_version";
        elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then
            nvm use "$nvm_version";
        fi
    fi
}
alias cd='cdnvm'
cd "$PWD"

このエイリアスは、

.nvmrc
ファイルを検出するために、現在のディレクトリから「上」を検索します。見つかった場合は、そのバージョンに切り替わります。そうでない場合は、デフォルトバージョンが使用されます。

zsh

ファイル
nvm use
のあるディレクトリで自動的に呼び出す
.nvmrc

これをに入れて、nvmに次のノードを指示する文字列を含むファイルを含むディレクトリに入るたびに自動的

$HOME/.zshrc
に呼び出すようにします。
nvm use
.nvmrc
use

# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
  local node_version="$(nvm version)"
  local nvmrc_path="$(nvm_find_nvmrc)"

  if [ -n "$nvmrc_path" ]; then
    local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$node_version" ]; then
      nvm use
    fi
  elif [ "$node_version" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

ファイル
nvm use
のあるディレクトリで自動的に呼び出す
.nvmrc

これには、低音がインストールされている必要があります。

# ~/.config/fish/functions/nvm.fish
function nvm
  bass source ~/.nvm/nvm.sh --no-use ';' nvm $argv
end

# ~/.config/fish/functions/nvm_find_nvmrc.fish
function nvm_find_nvmrc
  bass source ~/.nvm/nvm.sh --no-use ';' nvm_find_nvmrc
end

# ~/.config/fish/functions/load_nvm.fish
function load_nvm --on-variable="PWD"
  set -l default_node_version (nvm version default)
  set -l node_version (nvm version)
  set -l nvmrc_path (nvm_find_nvmrc)
  if test -n "$nvmrc_path"
    set -l nvmrc_node_version (nvm version (cat $nvmrc_path))
    if test "$nvmrc_node_version" = "N/A"
      nvm install (cat $nvmrc_path)
    else if test "$nvmrc_node_version" != "$node_version"
      nvm use $nvmrc_node_version
    end
  else if test "$node_version" != "$default_node_version"
    echo "Reverting to default Node version"
    nvm use default
  end
end

# ~/.config/fish/config.fish
# You must call it on initialization or listening to directory switching won't work
load_nvm > /dev/stderr

テストの実行

Tests are written in Urchin. Install Urchin (and other dependencies) like so:

npm install

There are slow tests and fast tests. The slow tests do things like install node and check that the right versions are used. The fast tests fake this to test things like aliases and uninstalling. From the root of the nvm git repository, run the fast tests like this:

npm run test/fast

Run the slow tests like this:

npm run test/slow

Run all of the tests like this:

npm test

Nota bene: Avoid running nvm while the tests are running.

Environment variables

nvm exposes the following environment variables:

  • NVM_DIR
    - nvm's installation directory.
  • NVM_BIN
    - where node, npm, and global packages for the active version of node are installed.
  • NVM_INC
    - node's include file directory (useful for building C/C++ addons for node).
  • NVM_CD_FLAGS
    - used to maintain compatibility with zsh.
  • NVM_RC_VERSION
    - version from .nvmrc file if being used.

さらに、nvmは、、および

PATH
存在する場合はバージョンを変更するときに変更します。
MANPATH
NODE_PATH

Bashの完了

有効にするには、次のものを入手する必要があります

bash_completion

[[ -r $NVM_DIR/bash_completion ]] && \. $NVM_DIR/bash_completion

上記のソーシングラインをプロファイルのnvmのソーシングラインのすぐ下に配置します(

.bashrc
.bash_profile
)。

使用法

nvm:

$ nvm
Tab

alias               deactivate          install             list-remote         reinstall-packages  uninstall           version
cache               exec                install-latest-npm  ls                  run                 unload              version-remote
current             help                list                ls-remote           unalias             use                 which

nvmエイリアス:

$ nvm alias
Tab

default      iojs         lts/*        lts/argon    lts/boron    lts/carbon   lts/dubnium  lts/erbium   node         stable       unstable

$ nvm alias my_alias
Tab

v10.22.0       v12.18.3      v14.8.0

nvmの使用:

$ nvm use
Tab

my_alias        default        v10.22.0       v12.18.3      v14.8.0

nvmアンインストール:

$ nvm uninstall
Tab

my_alias        default        v10.22.0       v12.18.3      v14.8.0

互換性の問題

nvm
デフォルト以外の設定が設定されている場合、いくつかの問題が発生します。(#606を参照)以下は問題を引き起こすことが知られています:

内部

~/.npmrc

prefix='some/path'

環境変数:

$NPM_CONFIG_PREFIX
$PREFIX

シェル設定:

set -e

AlpineLinuxへのnvmのインストール

最高のパフォーマンス(およびその他の最適化)を提供するために、nvmは、を実行すると、ノード(およびnpm)用にコンパイル済みのバイナリをダウンロードしてインストールします

nvm install X
。Nodeプロジェクトは、メインストリーム/従来のLinuxディストリビューション(Debian、Ubuntu、CentOS、RedHatなど)用に構築されたこれらのコンパイル済みバイナリをコンパイル、テスト、ホスト/提供します。

Alpine Linuxは、メインストリーム/従来のLinuxディストリビューションとは異なり、非常にコンパクトな(〜5MB)LinuxディストリビューションであるBusyBoxに基づいています。BusyBox(したがってAlpine Linux)は、ほとんどの主流/従来のLinuxディストリビューション(musl )とは異なるC /C++スタックを使用します。これにより、このような主流/従来のバイナリプログラムはAlpine Linuxと互換性がなくなります。したがって、Alpine Linuxで単純

nvm install X
に実行して、ダウンロードしたバイナリが正しく実行されることを期待することはできません。これを試してみると、「...存在しません」というエラーが表示される可能性があります。

nvmがノードソースをダウンロードしてローカルでコンパイルするように要求する

-s
フラグがあります。
nvm install

Alpine Linuxにnvmをインストールすることまだ必要な場合、または必要な場合は、AlpineLinuxシェルから次のコマンドを実行することでこれを実現できるはずです。

apk add -U curl bash ca-certificates openssl ncurses coreutils python2 make gcc g++ libgcc linux-headers grep util-linux binutils findutils
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

Nodeプロジェクトにはいくつかの要望がありますが、Alpine互換のバイナリを提供する具体的な計画はありません(構築、テスト、およびサポートのオーバーヘッドのため)。

代替案として、@ mhart(ノード寄稿者)には、ノードとオプションでnpmがプリインストールされたAlpineLinux用のDockerイメージがいくつかあります。

アンインストール/削除

手動アンインストール

nvm
手動で削除するには、以下を実行します。

$ rm -rf "$NVM_DIR"

以下の行を編集

~/.bashrc
(または他のシェルリソース構成)して削除します。

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[[ -r $NVM_DIR/bash_completion ]] && \. $NVM_DIR/bash_completion

開発環境用のDocker

開発とテストの作業を容易にするために、開発用のDockerfileがあります。これは、Ubuntu 18.04ベースイメージに基づいており、

nvm
開発に不可欠で便利なツールを備えており、環境のdockerイメージを構築するには、次の場所でdockerコマンドを実行します。
nvm
リポジトリのルート:

$ docker build -t nvm-dev .

これにより、現在のnvmリポジトリと事前定義された開発環境がという名前のDockerイメージにパッケージ化されます。正常にビルドされたら、次

nvm-dev
の方法でイメージを検証します
docker images

$ docker images

REPOSITORY         TAG                 IMAGE ID            CREATED             SIZE
nvm-dev            latest              9ca4c57a97d8        7 days ago          650 MB

エラーメッセージが表示されない場合は、次の操作を簡単に行うことができます。

$ docker run -h nvm-dev -it nvm-dev

nvm@nvm-dev:~/.nvm$

イメージの作成には約8分かかり、イメージサイズは約650MBになるため、本番環境での使用には適していませんのでご注意ください。

dockerの詳細とドキュメントについては、公式Webサイトを参照してください。

Problems

  • If you try to install a node version and the installation fails, be sure to run

    nvm cache clear
    to delete cached node downloads, or you might get an error like the following:

    curl: (33) HTTP server doesn't seem to support byte ranges. Cannot resume.

  • Where's my

    sudo node
    ? Check out #43

  • After the v0.8.6 release of node, nvm tries to install from binary packages. But in some systems, the official binary packages don't work due to incompatibility of shared libs. In such cases, use

    -s
    option to force install from source:

nvm install -s 0.8.6
  • If setting the
    default
    alias does not establish the node version in new shells (i.e.
    nvm current
    yields
    system
    ), ensure that the system's node
    PATH
    is set before the
    nvm.sh
    source line in your shell profile (see #658)

macOS Troubleshooting

nvm node version not found in vim shell

If you set node version to a version other than your system node version

nvm use 6.2.1
and open vim and run
:!node -v
you should see
v6.2.1
if you see your system version
v0.12.7
. You need to run:

sudo chmod ugo-x /usr/libexec/path_helper

More on this issue in dotphiles/dotzsh.

nvm is not compatible with the npm config "prefix" option

Some solutions for this issue can be found here

There is one more edge case causing this issue, and that's a mismatch between the

$HOME
path and the user's home directory's actual name.

You have to make sure that the user directory name in

$HOME
and the user directory name you'd see from running
ls /Users/
are capitalized the same way (See this issue).

To change the user directory and/or account name follow the instructions here

Homebrew makes zsh directories unsecure

zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]? y

Homebrew causes insecure directories like

/usr/local/share/zsh/site-functions
and
/usr/local/share/zsh
. This is not an
nvm
problem - it is a homebrew problem. Refer here for some solutions related to the issue.

Macs with M1 chip

Experimental support for the M1 architecture was added in node.js v15.3 and full support was added in v16.0. Because of this, if you try to install older versions of node as usual, you will probably experience either compilation errors when installing node or out-of-memory errors while running your code.

So, if you want to run a version prior to v16.0 on an M1 Mac, it may be best to compile node targeting the

x86_64
Intel architecture so that Rosetta 2 can translate the
x86_64
processor instructions to ARM-based Apple Silicon instructions. Here's what you will need to do:

  • Install Rosetta, if you haven't already done so

    $ softwareupdate --install-rosetta

    You might wonder, "how will my M1 Mac know to use Rosetta for a version of node compiled for an Intel chip?". If an executable contains only Intel instructions, macOS will automatically use Rosetta to translate the instructions.

  • Open a shell that's running using Rosetta

    $ arch -x86_64 zsh

    Note: This same thing can also be accomplished by finding the Terminal or iTerm App in Finder, right clicking, selecting "Get Info", and then checking the box labeled "Open using Rosetta".

    Note: This terminal session is now running in

    zsh
    . If
    zsh
    is not the shell you typically use,
    nvm
    may not be
    source
    'd automatically like it probably is for your usual shell through your dotfiles. If that's the case, make sure to source
    nvm
    .

    $ source "${NVM_DIR}/nvm.sh"
  • 興味のある古いバージョンのノードをインストールします。例として12.22.1を使用しましょう。これにより、ノードのソースコードがフェッチされ、コンパイルされます。これには数分かかります。

    $ nvm install v12.22.1 --shared-zlib

    --shared-zlib
    注:なぜ含まれているのか不思議に思うかもしれません。Appleのシステム
    clang
    コンパイラの最近のバージョンにはバグがあります。
    --shared-zlib
    これらの壊れたバージョンのいずれかがシステムにインストールされている場合、フラグを含めなくても、上記の手順は成功する可能性があります。ただし、後で
    npm install
    古いバージョンのnode.jsを使用して何かを実行しようとすると、
    incorrect data check
    エラーが表示されます。これに対処する煩わしさを避けたい場合は、そのフラグを含めてください。詳細については、この問題このコメントを参照してください

  • 終了してネイティブシェルに戻ります。

    $ exit
    $ arch
    arm64

    注:2番目のステップでCLIコマンドを実行するのではなく、「Rosettaを使用して開く」というラベルの付いたボックスを選択した場合は、

    i386
    ここに表示されます。そのボックスを選択する別の理由がない限り、今すぐ選択を解除できます。

  • アーキテクチャが正しいことを確認してください。

    x64
    はの略語で
    x86_64
    、これはあなたが見たいものです。

    $ node -p process.arch
    x64

これで、通常どおりノードを使用できるようになります。

メンテナ

現在、唯一のメンテナは@ljharbです-より多くのメンテナが大歓迎です、そして私たちは時間をかけてチームに人々を加えることを望んでいます。プロジェクトが進展するにつれて、ガバナンスは再評価されます。

ライセンス

LICENSE.mdを参照してください。

著作権表示

CopyrightOpenJSFoundationおよび寄稿

nvm
者。全著作権所有。OpenJS Foundationは登録商標を有しており、商標を使用しています。OpenJS Foundationの商標のリストについては、当社の商標ポリシーおよび商標リストを参照してください。Node.jsは、Joyent、Inc.の商標であり、許可を得て使用しています。OpenJS Foundationの商標リストに記載されていない商標およびロゴは、それぞれの所有者の商標™または登録®商標です。それらの使用は、それらとの提携またはそれらによる承認を意味するものではありません。

OpenJS Foundation | 利用規約| プライバシーポリシー| OpenJS財団細則| 商標ポリシー| 商標リスト| クッキーポリシー