Posted at

PowerShell v2 で動くNode.jsのバージョンマネージャを作った

これは PowerShell Advent Calendar 2018の21日目の記事です。


nvmp

clomie/nvmp: Node.js Version Manager running on Powershell v2

https://github.com/clomie/nvmp

Windows向けのPowerShell製Node.jsバージョンマネージャです。

特徴としては、



  • PowerShell v2 で動く

  • 管理者権限を必要としない

  • インターネットオプションに設定されたProxy設定を使って動作する

つまり、


  • 使っているPCがWindows7


  • $PSVersionTableを確認したら2.0だった

  • アカウントに管理者権限がないのでPowerShellエンジンをアップデートできない

という状況でも使えます。


インストール方法

READMEにある通りです。もちろんgit cloneではなく、zipをダウンロードして解凍してもOKです。

install.ps1を実行するとnvmp.cmdへのPATHが通って使えるようになります。


インストール方法

PS C:/git/nvmp> . .\install.ps1



使い方

インストールさえしてしまえば、コマンドプロンプトでも動きます。

nvmp.gif


コマンド一覧

その他のコマンドについてはヘルプを見てください。

> nvmp help

Node Version Manager by Powershell

Usage:
nvmp help : Show this message
nvmp install <version> [arch] : Download and install the specified version of node.js.
Optionally specify whether to install the "x86" or "x64" version (defaults to system arch).
nvmp uninstall <version> [arch] : Uninstall the specified version of node.js
nvmp use <version> [arch] : Switch to use the specified version. Optionally specify x86/x64 architecture.
nvmp current : Show current in-use version of node.js
nvmp ls : List the node.js installations.
nvmp ls-remote : List the installable versions

Example:
nvmp install v10.9.0 : Install a specific version number of node.js
nvmp install v10.9.0 x86 : Install a 32-bit version
nvmp use v10.9.0 : Use the specific version


インストール先のディレクトリ

%USERPROFILE%\.nvmp\versionsディレクトリにダウンロードしたzipを展開します。

nvmp useコマンドで選択したバージョンに対して、%USERPROFILE%\.nvmp\currentディレクトリからジャンクションを張ることでバージョン切り替えを実現しています。

%USERPROFILE%

`- .nvmp
+- current [-> .\versions\v10.14.2]
`- versions
+- v11.4.0
+- v10.14.2
+- v8.14.0
`- v6.15.1


対応しているNode.jsのバージョン

v4.5.0〜v4.9.1, v6.2.1〜

https://nodejs.org/dist/$(version)/node-$(version)-win-$(arch).zipをダウンロードする都合上、それが用意されているバージョンだけに対応しています。バージョン一覧を見ていると、2016年6月あたりからWindows向けzipファイルも配布されるようになった模様です。

元々はnode.exeを単体でダウンロードして、npmのアーカイブはgithubから別途ダウンロードする実装で、当時はもう少し古いバージョンにも対応していました。

現在はcodeload.github.comがTLS1.2以外で接続できなくなってしまい、PowerShell v2ではSystem.net.WebClientがTLS1.2に対応していないため、実装を見直した経緯があります。


さいごに

動作検証できる環境にいる限りはメンテしていくつもりです。

今後はlatestやLTSコードネームによるバージョン指定とかに対応していきたい。

また、2018年になってPowerShell Core 6.0もクロスプラットフォーム向けにリリースされたことですし、v2向けの実装は維持しつつ、最新のバージョンによる実装も試していきたいですね。