Synology NAS に Node v12 をインストールしたことで npm install が失敗する件の対策
Synology NAS に Node v12 をインストールしたことで npm install が失敗する件の対策について
現状の対策方法: Node v8 の npm を引き続き実行する。
注意 この記事では Node v12 の npm install を正しく実行させる方法については書いていません。それをするには zlib をアップデートする必要があるはずです。
Synologyのパッケージアップデートの関係でNodejsのv12がインストールされた
— ハルア@千早P (@namaHarumaki_) 2020年4月11日
今まではv8の方のパスが通っていたわけだがv12がインストールされたことでそちらのパスが通るようになった
ここで問題発生
v12になってからはnpm installが失敗する
Synologyにインストールされているzlibが古いからだ
zlibを手動で更新するのも面倒なのでnpm installする時にはv8の方を明示的に指定するのがいいと思われる
— ハルア@千早P (@namaHarumaki_) 2020年4月11日
例 uuid をインストール
— ハルア@千早P (@namaHarumaki_) 2020年4月11日
ポイントはv8のnodeとnpm-cli.jsを指定すること
$ /.../Node.js_v8/usr/local/bin/node /.../Node.js_v8/usr/local/lib/node_modules/npm/bin/npm-cli.js i uuid
Synology NAS のパッケージアップデートの関係で Nodejs の v12 がインストールされた。
今までは v8 の方のパスが通っていたわけだが v12 がインストールされたことでそちらのパスが通るようになった。
ここで問題発生
v12 になってからは npm install が失敗する。
エラーメッセージ
ZlibError: zlib: invalid distance too far back error code Z_DATA_ERROR
Synology NAS にインストールされている zlib が古いからだ。
zlib を手動で更新するのも面倒なので npm install する時には v8 の方を明示的に指定するのがいいと思われる。
例 uuid をインストール ポイントはv8のnodeとnpm-cli.jsを指定すること
$ /volume1/@appstore/Node.js_v8/usr/local/bin/node /volume1/@appstore/Node.js_v8/usr/local/lib/node_modules/npm/bin/npm-cli.js i uuid
/volume1 の部分は環境依存。
毎回入力するのは面倒なので環境変数に突っ込むなり何なりすればいいと思う。
例 ~/.profile
ファイルに下記を追記する。.profile
がなければ作る。
export NODEv8="/volume1/@appstore/Node.js_v8/usr/local/bin/node" export NPMv8="/volume1/@appstore/Node.js_v8/usr/local/lib/node_modules/npm/bin/npm-cli.js" export npmv8="$NODEv8 $NPMv8"
以降、例えば npm list
は $npmv8 list
のように実行する。
関連する報告