1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

記事投稿キャンペーン 「2024年!初アウトプットをしよう」

npm installできないときの解決策③(Stack Trace)

Last updated at Posted at 2024-01-29

1. 問題

npm installできないときの解決策②(ChatGPT)の続き。
ChatGPTに聞いて何となくbcryptfseventsにインストールエラーが起きていることが分かった。解決策も教わった。
でも、自分自身で把握&解決してみたい。

2. 環境

node 14
npm 6.14.4
Windows 10

3. 解決

Stack Traceを読めばエラーの原因が特定できる。
今回のエラーの場合、bcryptfseventsのDependencyエラーが原因だった。
bcryptはその問題を解決したバージョンにアップデートして(5.1.1)、fseventsはWindows 10環境に要らないのでエラーが出ても無視することにした。

4. 詳細

以下はStack Traceに基づいてエラーの原因と解決策を見つけ出す手順である。

4.1 Stack Traceを見てエラーの原因を特定

エラー本文を「stack」文字列を中心に読んでみると、以下のことが分かる。

  • fseventsをインストールしようとしたら、node-gypにエラーが起きた。
  • bcryptをインストールしようとしたら、node-pre-gypnode-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 公式文書を確認

fseventsbcryptの公式文書にnode-gypnode-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 解決策の検索

fseventsbcryptnode-pre-gypnode-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. 参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?