久しぶりにWindows OSでNode.jsを触ろうと、古いバージョンをアップデートしようしたらエラーに遭遇。nodistでnode.jsはアップデートできたけれど、npmのアップデートがうまくいきませんでした。
# nodist 10.16.0 10.16.0 Default global pacakge update successful.
# nodist 10.16.0 # npm --version Sorry, there's a problem with nodist. Couldn't resolve npm version spec match : Couldn't find any matching version
いろいろ試してみると、気になるエラーを発見。
# nodist npm global 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.9.0 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)
https://codeload.github.com/npm/npm/tar.gz/v6.9.0からのレスポンスがなく、npmのアップデートが滞ってしまっているようです。
解決方法
gitリポジトリが移動しているので正しいURLを指定します。編集するのはC:\Program Files (x86)\Nodist\lib\npm.jsです。ダウンロードURLを制御している箇所があるので、
https://codeload.github.com/npm/npm/tar.gz/vVERSION
を
https://codeload.github.com/npm/cli/tar.gz/vVERSION
に変えてあげます。
/** * Get a download URL for the version * @param {string} version * @return {string} */ NPMIST.downloadUrl = function(version){ return 'https://codeload.github.com/npm/cli/tar.gz/vVERSION' .replace('VERSION',version.replace('v','')); };
改めてnpmのアップデートを実行すると、正しく動作するようになりました。
# nodist npm global match npm match https://codeload.github.com/npm/cli/tar.gz/v6.9.0 [===============] 5475/5631 KiB 97% 0.3s