1. 問題
npm installできないときの解決策②(ChatGPT)の続き。
ChatGPTに聞いて何となくbcrypt
とfsevents
にインストールエラーが起きていることが分かった。解決策も教わった。
でも、自分自身で把握&解決してみたい。
2. 環境
node 14
npm 6.14.4
Windows 10
3. 解決
Stack Trace
を読めばエラーの原因が特定できる。
今回のエラーの場合、bcrypt
とfsevents
のDependencyエラーが原因だった。
bcrypt
はその問題を解決したバージョンにアップデートして(5.1.1)、fsevents
はWindows 10環境に要らないのでエラーが出ても無視することにした。
4. 詳細
以下はStack Traceに基づいてエラーの原因と解決策を見つけ出す手順である。
4.1 Stack Traceを見てエラーの原因を特定
エラー本文を「stack」文字列を中心に読んでみると、以下のことが分かる。
-
fsevents
をインストールしようとしたら、node-gyp
にエラーが起きた。 -
bcrypt
をインストールしようとしたら、node-pre-gyp
とnode-gyp
にエラーが起きた。
4.2 追加調査
どうやらDependencyのエラーが原因のようだ。
本当にそういう依存関係なのか?パッケージを作った人もこのイシューを知っているのか?調べてみる。
4.2.1 npm list
npm listして、fseventsとbcryptのDependencyを確認する。
fseventsがnode-pre-gypに依存していることが分かる。
解決後の照会結果なので、bcryptがnode-pre-gypを依存していることは見えない。
$ npm list node-pre-gyp
nodebird@0.0.1 C:\Users\ivego\pj\nodebird
`-- nunjucks@3.2.0
`-- chokidar@2.1.8
`-- UNMET OPTIONAL DEPENDENCY fsevents@1.2.11
`-- UNMET OPTIONAL DEPENDENCY node-pre-gyp@0.14.0
4.2.2 公式文書を確認
fsevents
とbcrypt
の公式文書にnode-gyp
やnode-pre-gyp
について書いてないか確認する。
4.2.2.1 fsevents
言及無し。
4.2.2.2 bcrypt
node-gyp only works with stable/released versions of node. Since the bcrypt module uses node-gyp to build and install, you'll need a stable version of node to use bcrypt. If you do not, you'll likely see an error that starts with:
gyp ERR! stack Error: "pre" versions of node cannot be installed, use the --nodedir flag instead
If you face an error like this:
node-pre-gyp ERR! Tried to download(404): https://github.com/kelektiv/node.bcrypt.js/releases/download/v1.0.2/bcrypt_lib-v1.0.2-node-v48-linux-x64.tar.gz
make sure you have the appropriate dependencies installed and configured for your platform. You can find installation instructions for the dependencies for some common platforms in this page.
4.2 解決策の予想
fseventsとbcryptはnode-gypとnode-pre-gypに依存している。
でもnode-gypとnode-pre-gypに何か不具合があってfseventsとbcryptがインストールできない状態。
だからnode-gypとnode-pre-gypのエラーを直すか、依存パッケージのエラーが解決したfseventsとbcryptのバージョンを使用すればいいのでは。
4.3 解決策の検索
fsevents
、bcrypt
、node-pre-gyp
、node-gyp
のキーワードでググってみると、様々な解決策が出てくる。
-
依存パッケージのエラー修正
- node-pre-gypを直接インストール。
- node-gypが依存するPythonとVisual Studio build toolsをSettingする。
- node-gypのグローバルインストール。
-
インストールできないパッケージのアップデート・差し替え・使用中止
- bcryptの代わりに、node-pre-gyp問題がないというbcryptjsを使用。
- fseventsはMac OS用なので、使用しない。
- node-pre-gyp問題が解決したというbcrypt 5.1.0を使用。
4.4 解決策の選択・適用
本人の状況に合う解決策を選ぶ。
今回は「bcrypt
はその問題を解決したバージョン以上にアップデート(5.1.1)。fsevents
はWindows 10環境に要らないのでエラーが出ても無視」することにした。
そもそも対象のプロジェクトを実行しようとする目的は、それのMVC
構造を見ること以外ないので。
5. 次の記事
なし。
6. まとめ
npmインストールできないとき、エラー文をStack Traceを中心に読めばエラーの原因が分かる。
Dependencyエラーの場合、npm listで依存関係を調べたり、当該パッケージの公式文書に何か手掛かりはないか読んでみたりしてさらに調査してみるといい。
解決策をまず自分でざっと予想してみる。その後解決策をググる。
解決策が複数ある場合、自分の目的に合うのを選ぶ。
7. 感じたこと
Dependency自体のエラーを直す方が勉強にもっと役立つのでは、と思ったけど、そうすると時間がかかりすぎてやめた。社会人の勉強時間は大事。
でもいつの日かやってみたい。
8. 参考
-
bcryptjs
-
bcrypt 5.1.0
-
node-gypはpythonとvisual studio build toolのSetting
-
node-gypのグローバルインストール
-
bcrypt
-
fsevents