Node.js
npm
nodist

「nodist npm match」で「Failed to read response from (略)」エラーになる件についてのメモ


問題

2018年12月22日現在、久々に JavaScript の復習をしようと思って、Node 10 とそれに合致する npm をインストールしようと、Nodist v0.8.8 から「nodist npm match」を実行したら以下のエラーが発生した。

> nodist add 10

(略)
> nodist global 10
(略)
> nodist npm match
npm match
stream.js:74
throw er; // Unhandled stream error in pipe.
^

Error: Failed to read response from https://codeload.github.com/npm/npm/tar.gz/v6.4.1
at Request.<anonymous> (C:\Program Files (x86)\Nodist\lib\build.js:110:25)
at emitOne (events.js:96:13)
at Request.emit (events.js:188:7)
at Request.onRequestResponse (C:\Program Files (x86)\Nodist\node_modules\request\request.js:954:10)
at emitOne (events.js:96:13)
at ClientRequest.emit (events.js:188:7)
at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:473:21)
at HTTPParser.parserOnHeadersComplete (_http_common.js:99:23)
at TLSSocket.socketOnData (_http_client.js:362:20)
at emitOne (events.js:96:13)
at TLSSocket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at TLSSocket.Readable.push (_stream_readable.js:134:10)
at TLSWrap.onread (net.js:551:20)


暫定対応

Issues #219をみたところ、どうやら npm の GitHub リポジトリのパスが npm/npm から npm/cli に変わり、前者の方の Releases には v6.1.0 までしかないのが原因とのこと。

修正のための PR はすでに出されていた。

このPR の修正内容にしたがって、C:\Program Files (x86)\Nodist\lib\npm.js を修正して事象の回避に成功した。


恒久対応

前述の PR のマージ & 新バージョンのリリースを待つ。

ただ、2018年12月22日現在、Nodist の master の最後のコミットが 2017年6月9日なので、Nodist のメンテナンスが止まっている可能性がある・・・。


追記(2018/12/29)

結局、僕は nvm-windows を使うことにしました。


補足

事象発生後は以下の空フォルダが残り、以降は「nodist npm match」は成功する。

だが、その状態で「npm -v」を実行しても以下のエラーとなる。

C:\Users\teru1>npm -v

internal/modules/cjs/loader.js:583
throw err;
^

Error: Cannot find module 'C:\Program Files (x86)\Nodist\npmv\6.4.1\bin\npm-cli.js'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
at Function.Module._load (internal/modules/cjs/loader.js:507:25)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:282:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)

この挙動は事象発生後に以下のパスに空のフォルダが作成されているのが原因であると推測される。

C:\Program Files (x86)\Nodist\npmv(6.1.0 より後のバージョン)

私の場合は、暫定対応実施前に念のために削除した。