npm インストールが node-gyp の再構築と libpq で失敗する

npm インストールが node-gyp の再構築と libpq で失敗する
> [email protected] install /home/johnsoct/bobtail/node_modules/libpq
> node-gyp rebuild

/home/johnsoct/.nvm/versions/node/v12.22.4/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin/node-gyp: line 5: /usr/local/lib/node_modules/node-gyp/bin/node-gyp.js: No such file or directory

エラーを読みましたが、/usr/local/lib/ には何もインストールされていません。node-gyp をグローバルにインストールしても、そこにはインストールされません。

私はもう試した:

  • postgresの再インストール(https://fedoraproject.org/wiki/PostgreSQL
  • fedora 用の libpq のインストール
  • 512394823094回再起動
  • node_modules を削除して再インストールする (魔法のようなことが起こることを期待して何度も繰り返します)
  • package-lock.jsonを削除して再インストールする
  • 長い間忘れていた他のもの

私が知っている小さなヒントが 1 つあります。 にインストールされないパッケージnpm installは です。これが違いを生むかどうかはわかりませんが、インストール レポートに が記載されているpg-nativeので、関連していると考えられます。libpq

興味があれば、私の PATH は次のようになります (最初は linuxbrew を使用して postgres をインストールおよびアンインストールしました)。 /home/johnsoct/bin:/usr/pgsql-10/bin:/usr/pgsql-10/bin:/home/linuxbrew/.linuxbrew/opt/postgresql@10/bin:/home/johnsoct/bin:/home/linuxbrew/.linuxbrew/opt/postgresql@10/bin:/home/johnsoct/.nvm/versions/node/v12.22.4/bin:/home/johnsoct/.local/bin:/home/johnsoct/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin

アドバイスや提案があれば本当に助かります...気が狂いそうです。

答え1

これはかなり無理がある話ですが、node-gyp を使用して libpq だけをビルドするときに同じ問題が発生したので、念のため、修正方法を共有しようと思いました。

エラー出力は次のようになりました:

$ npm install
npm ERR! code 1
npm ERR! path /home/ekik/Source/home/grafana/node_modules/libpq
npm ERR! command failed
npm ERR! command sh -c -- node-gyp rebuild
npm ERR! node:internal/modules/cjs/loader:936
npm ERR!   throw err;
npm ERR!   ^
npm ERR! 
npm ERR! Error: Cannot find module 'object-assign'
npm ERR! Require stack:

Manjaro Linux で NodeJS 14 から 16 または 18 にアップグレードしたときに発生し始めました。どうやら、出荷されている node-gyp パッケージは、(npm インストール ログから収集された) 大量の非推奨のものを使用しており、どうやらデフォルトではインストールされていないようです (もう)。

私の非常に汚い修正は単純に次のとおりです:

sudo npm install --global object-assign code-point-at number-is-nan request

これにより、グローバル node_modules が汚染されることに注意してください。

関連情報