kdnakt blog

hello there.

nvm useでexit status 145になった時の解決方法

古いNode.jsを使おうとしてハマったのでメモ。

 

 

[環境情報]

利用しているOSはWindows 10で、PowerShell (+ Windows Terminal)上でnvmを実行している。

利用しているnvmのバージョンは1.1.8だった。

> nvm -v

Running version 1.1.8.

Usage:

  nvm arch                     : Show if node is running in 32 or 64 bit mode.
  nvm current                  : Display active version.
  nvm install <version> [arch] : The version can be a specific version, "latest" for the latest current version, or "lts" for the
                                 most recent LTS version. Optionally specify whether to install the 32 or 64 bit version (defaults
                                 to system arch). Set [arch] to "all" to install 32 AND 64 bit versions.
                                 Add --insecure to the end of this command to bypass SSL validation of the remote download server.
  nvm list [available]         : List the node.js installations. Type "available" at the end to see what can be installed. Aliased as ls.
  nvm on                       : Enable node.js version management.
  nvm off                      : Disable node.js version management.
  nvm proxy [url]              : Set a proxy to use for downloads. Leave [url] blank to see the current proxy.
                                 Set [url] to "none" to remove the proxy.
  nvm node_mirror [url]        : Set the node mirror. Defaults to https://nodejs.org/dist/. Leave [url] blank to use default url.
  nvm npm_mirror [url]         : Set the npm mirror. Defaults to https://github.com/npm/cli/archive/. Leave [url] blank to default url.
  nvm uninstall <version>      : The version must be a specific version.
  nvm use [version] [arch]     : Switch to use the specified version. Optionally use "latest", "lts", or "newest".
                                 "newest" is the latest installed version. Optionally specify 32/64bit architecture.
                                 nvm use <arch> will continue using the selected version, but switch to 32/64 bit mode.
  nvm root [path]              : Set the directory where nvm should store different versions of node.js.
                                 If <path> is not set, the current root will be displayed.
  nvm version                  : Displays the current running version of nvm for Windows. Aliased as v.

 

[exit status 5]

2021年3月現在LTSのNode.js 16系を利用していたが、諸事情によりNode.js 12系を利用する必要に迫られた。

 

前述のヘルプに従って、nvm useコマンドを実行すると、以下のようにエラーが発生してしまった。

> nvm use 12.22.10
exit status 5: �A�N�Z�X�����ۂ����܂����B

 

文字化けしていて何が何だかわからない...とい思いつつ終了時ステータスが表示されているので、ググってみると以下の記事に辿り着いた。

qiita.com

 

ターミナルを管理者権限で起動することで解消できるとのことだったので、Windows Terminalを「管理者として実行」して、再びnvm useコマンドを実行すると、exit status 5は解消することができた。できたのだが...

 

f:id:kidani_a:20220310095909p:plain

 

[exit status 145]

今度は別の問題が発生して、Node.js 12系を使わせてくれない。

> nvm use 12.22.10
exit status 145: �f�B���N�g�������ł͂����܂����B

 

また文字化けして読めない...。

泣きながらググると、以下のStackoverflowの記事を見つけられた。

stackoverflow.com

 

どうやら、文字化けして読めなかったstatus 145はThe directory is not emptyというエラーメッセージのようだ。

記事中では、以下のいずれかのディレクトリが存在する場合は、これを削除して再度nvm useコマンドを実行せよ、とあった。

  • C:\Program Files\nodejs
  • C:\Program Files (x86)\nodejs

 

自分の場合はC:\Program Files\nodejsディレクトリが存在していた。念の為バックアップとしてC:\Program Files\old_nodejsにリネームして、あらためてnvm useコマンドを実行すると、無事Node.jsのバージョンを切り替えることができた。

 

[まとめ]

  • nvm useコマンドでexit status 5エラーになったら、管理者権限でターミナルを起動して再実行する
  • nvm useコマンドでexit sttaus 145エラーになったら、C:\Program Files\nodejsディレクトリを削除して再実行する