0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

nvm-windowsでnvm useが全部切り替わる問題をPATHで解決する

0
Posted at

はじめに

Windowsでnvm(nvm-windows)を使ってNode.jsのバージョンを管理していると、nvm useが全ターミナル共通で切り替わってしまう問題に遭遇します。他のバージョン管理ツール(fnm、Voltaなど)を導入できない制約下で、ターミナルごとにNode.jsのバージョンを固定する方法を紹介します。

問題

nvm-windowsはUnix版nvmと異なり、nvm useを実行すると**全ターミナル共通のシンボリックリンク(参照の切り替え)**を書き換えます。

そのため、以下のような状況になります。

  • プロジェクトAのターミナルで nvm use 24.18.0 を実行
  • 別で開いていたプロジェクトBのターミナル(v16.15.0で作業していた)まで 24.18.0に統一されてしまう
# ターミナルB(本来v16で動かしたい)
PS > node -v
v24.18.0   # ← 勝手に変わってしまった

プロジェクトAではNode 16、プロジェクトBではNode 24、というように同時に別バージョンを使いたいのに、それができません。

解決方法

nvm use を使わず、そのターミナル(セッション)のPATHの先頭に、使いたいバージョンのフォルダを追加することで解決できます。

1. nvmのインストール先を確認する

nvm-windowsのインストール先は環境変数 NVM_HOME に入っています。

echo "$env:NVM_HOME"
# 例: C:\Users\xxxxxx\AppData\Local\nvm

各バージョンは $env:NVM_HOME\v<バージョン> のフォルダに格納されています。

2. node.exe が存在するか確認する

Test-Path "$env:NVM_HOME\v16.15.0\node.exe"
# True なら存在する

3. そのターミナルのPATH先頭にバージョンを追加する

Node 16を使いたいターミナルで実行します。

$env:Path = "$env:NVM_HOME\v16.15.0;" + $env:Path

Node 24を使いたい別のターミナルでは、こちらを実行します。

$env:Path = "$env:NVM_HOME\v24.18.0;" + $env:Path

しくみ

  • $env:Path は PowerShellで環境変数PATH(コマンドの検索先フォルダ一覧)を読み書きする書き方
  • node と打つと、PATHを先頭から探して最初に見つかった node.exe が使われる
  • 先頭に目的バージョンのフォルダを足すことで、そのバージョンが優先される
  • + $env:Path で、元のPATHを後ろに残している

影響範囲

この変更は実行したターミナル(セッション)内だけに効きます。

  • 他のターミナルには影響しない
  • 今後新しく開くターミナルにも影響しない
  • そのターミナルを閉じれば元に戻る

これにより、nodenpm も指定したバージョンになり、複数プロジェクトを別バージョンで同時に動かせます。

# ターミナルA
$env:Path = "$env:NVM_HOME\v16.15.0;" + $env:Path
node -v   # v16.15.0

# ターミナルB(同時に別ウィンドウで)
$env:Path = "$env:NVM_HOME\v24.18.0;" + $env:Path
node -v   # v24.18.0

おわりに

nvm-windowsの nvm use はグローバルに作用するため、複数バージョンの同時利用には向きません。しかし、PATHをセッション単位で書き換えるという発想を使えば、追加ツールなしでターミナルごとにNode.jsのバージョンを固定できます。同じ制約で困っている方の参考になれば幸いです。

参考

JISOUのメンバー募集中!

プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページをのぞいてみてください!
▼▼▼
https://projisou.jp

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?