見出し画像

WindowsでNode.jsのバージョン管理 - Nodist v0.9.1(非推奨)

1. はじめに


Nodistについてはお勧めしません
2019年03月30日の最終更新からこれまでメンテナンスされてない
そもそも最新版が v0.9.1 でメジャーバージョンが 1 にすらなっていない
ていうかWindowsで使おうとするとバグがある

それでも案件で指定されててしょうがないんだ!という人だけみてください


2. Nodistをダウンロードする



3. Nodistをインストールする


NodistSetup-v0.9.1.exe を実行してデフォルトで進めてください

Next >
I Agree
Install


しばらく待つ
Pathの追加に失敗したら
環境変数に「C:\Program Files (x86)\Nodist\bin」を追加
Finish


4. バージョンチェックを行う


nodist, node, npm のコマンドのうしろに -v を付けて実行する
バージョンを確認できます
インストールしたばかりの場合は以下の通りになるはず

Nodistのバージョン

> nodist -v
0.9.1

nodeのバージョン

> node -v
v11.13.0

npmのバージョン

> npm -v
6.9.0


5. Node.jsのバージョン一覧を確認する


nodist dist を実行する
するとツラツラとバージョンが表示されます

> nodist dist
  0.1.14
  0.1.15
  0.1.16
  - 中略 -
  20.5.0
  20.5.1
  20.6.0


6. 公式でNode.jsのLTSバージョンを確認する


LTSのみ、ざっくりまとめると以下のようになります

2023/09/05 現在のNode.js LTS版バージョン

LTS(Long-Term Support)
長期サポートのこと

npm( Node-Package-Manager)
node.js や packege を管理するソフトウェア

V8
JavaScriptコードを解釈/実行するためのJavaScriptエンジン
Node.jsは内部でV8エンジンを動かし、サーバーサイドで実行できるようにする


7. 指定バージョンのNode.jsを取得する


ここでは2023年09月時点で最新となる LTSバージョン 18.17.1 を取得します
nodist + 18.17.1 を実行する
以下のようにダウンロードされます

> nodist + 18.17.1
 18.17.1 [===============] 69539/69539 KiB 100% 0.0s
18.17.1

まだダウンロードしただけなので Node.jsのバージョンは変わっていません

> node -v
v11.13.0

ダウンロードしたバージョンにNode.jsを切り替えます
nodist 18.17.1 を実行する
すると Node.js のバージョンが切り替わります

> nodist 18.17.1
18.17.1
18.17.1 (global)

> node -v
v18.17.1


8. npm をNode.jsに合わせる


Node.js と npm のバージョンを合わせてみよう

公式サイトでLTSバージョンを確認した際に npm バージョンが記述されていたかと思います
それに合わせて npm のバージョンをアップグレードする必要があります
が、勝手にやってくれるコマンドがあるのでそれを使いましょう

nodist npm match を実行する

※ここで変なエラーが発生したら、下部の失敗パターンを参照

> nodist npm match
npm match
https://codeload.github.com/npm/cli/tar.gz/v9.6.7 [===============] 89187/90811 KiB 98% 4.7s

98%表示のままですが、なぜか終わりました
「おそらく」シンボリックリンクの作成失敗しているのが原因です
ということで・・

シンボリックリンクを貼ろう①

インストールしたフォルダに ¥9.6.7¥workspacesのフォルダがあると思います
この中にある arborist とconfig フォルダは 以下のようにnode_modulesの@npmcliフォルダ配下にシンボリックリンクが貼られていないといけません

¥9.6.7¥workspaces¥arborist
¥9.6.7¥workspaces¥config

¥9.6.7¥node_modules¥@npmcli¥arborist
¥9.6.7¥node_modules¥@npmcli¥config

そこで mklink コマンドを実行してシンボリックリンクを貼ります
管理者権限でコマンドプロンプトを表示して mklink コマンドを実行してみましょう

> mklink /D "C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\@npmcli\arborist" "C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\arborist"
C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\@npmcli\arborist <<===>> C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\arborist のシンボリック リンクが作成されました

> mklink /D "C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\@npmcli\config" "C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\config"
C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\@npmcli\config <<===>> C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\config のシンボリック リンクが作成されました

シンボリックリンクを貼ろう②

さきほどの ¥9.6.7¥workspacesのフォルダには他にもフォルダがあると思います
この中にある arborist, config以外の フォルダは 以下のように node_modules配下にシンボリックリンクが貼られていないといけません

¥9.6.7¥workspaces¥libnpmaccess(他多数のフォルダ)

¥9.6.7¥node_modules¥libnpmaccess(他多数のフォルダ)

そこで mklink コマンドを実行してシンボリックリンクを貼ります
管理者権限でコマンドプロンプトを表示して mklink コマンドを実行してみましょう

> mklink /D "C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmaccess"     "C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmaccess"
C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmaccess <<===>> C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmaccess のシンボリック リンクが作成されました

> mklink /D "C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmdiff"       "C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmdiff"
C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmdiff <<===>> C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmdiff のシンボリック リンクが作成されました

> mklink /D "C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmexec"       "C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmexec"
C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmexec <<===>> C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmexec のシンボリック リンクが作成されました

> mklink /D "C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmfund"       "C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmfund"
C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmfund <<===>> C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmfund のシンボリック リンクが作成されました

> mklink /D "C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmhook"       "C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmhook"
C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmhook <<===>> C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmhook のシンボリック リンクが作成されました

> mklink /D "C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmorg"        "C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmorg"
C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmorg <<===>> C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmorg のシンボリック リンクが作成されました

> mklink /D "C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmpack"       "C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmpack"
C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmpack <<===>> C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmpack のシンボリック リンクが作成されました

> mklink /D "C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmpublish"    "C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmpublish"
C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmpublish <<===>> C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmpublish のシンボリック リンクが作成されました

> mklink /D "C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmsearch"     "C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmsearch"
C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmsearch <<===>> C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmsearch のシンボリック リンクが作成されました

> mklink /D "C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmteam"       "C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmteam"
C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmteam <<===>> C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmteam のシンボリック リンクが作成されました

> mklink /D "C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmversion"    "C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmversion"
C:\Program Files (x86)\Nodist\npmv\9.6.7\node_modules\libnpmversion <<===>> C:\Program Files (x86)\Nodist\npmv\9.6.7\workspaces\libnpmversion のシンボリック リンクが作成されました

これで npm が利用可能となりました

> npm -v
9.6.7

以上でインストール手順は終了です、おつかれさまでした


9. 失敗パターン


「npm をNode.jsに合わせる」でエラーになる

nodist npm match を実行した際に以下のようなエラーになった場合、Nodistのインストールがまともにできていなかった可能性が高いです
細かいことを調べるのは時間の無駄なので Nodistのアインイストール(下記手順参照)をしてもう一度インストールをしてみましょう

> nodist npm match
npm match
events.js:170
      throw er; // Unhandled 'error' event
      ^

Error: Failed to read response from https://codeload.github.com/npm/cli/tar.gz/v9.6.7
    at Request.<anonymous> (C:\Program Files (x86)\Nodist\lib\build.js:110:25)
    at Request.emit (events.js:193:13)
    at Request.onRequestResponse (C:\Program Files (x86)\Nodist\node_modules\request\request.js:1066:10)
    at ClientRequest.emit (events.js:193:13)
    at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:560:21)
    at HTTPParser.parserOnHeadersComplete (_http_common.js:113:17)
    at TLSSocket.socketOnData (_http_client.js:447:20)
    at TLSSocket.emit (events.js:193:13)
    at addChunk (_stream_readable.js:296:12)
    at readableAddChunk (_stream_readable.js:277:11)
    at TLSSocket.Readable.push (_stream_readable.js:232:10)
    at TLSWrap.onStreamRead (internal/stream_base_commons.js:150:17)
Emitted 'error' event at:
    at Request.<anonymous> (C:\Program Files (x86)\Nodist\lib\build.js:110:11)
    at Request.emit (events.js:193:13)
    [... lines matching original stack trace ...]
    at TLSWrap.onStreamRead (internal/stream_base_commons.js:150:17)


10. Nodistのアンインストール


Windowsの設定( Winキー + i )からアプリを選択

この時、他のページが開いてしまったら左上のホームを選択して ↑ へ

Nodistを選択しアンインストールを行う

アンインストールボタンをぽち
Uninstallボタンをぽち
しばらく待つ…
Finish

インストールフォルダを確認し存在する場合は削除する
(消してくれないので必ず存在していると思います)

環境変数を削除する(Winキー → env → システム環境変数の編集)

詳細設定タブ > 環境変数ボタンぽち
Path を選択して編集ボタンぽち
Nodistフォルダを参照している Path を削除

ユーザーフォルダにある.npmrc, .node_repl_history もあれば消す
 C:¥ ユーザー ¥ xxxxx(ログインユーザー名)


11. おわりに


まとめると、Nodist はたまにインストールに失敗する
しかもNodistコマンドでシンボリックリンクを貼るのがへたくそである
workspaseフォルダにあるモジュールを「適切な場所」に手動でシンボリックリンクを張る必要がある

ありえない!アンインストールを推奨します

この記事が気に入ったらサポートをしてみませんか?