node-gyp 및 libpq를 다시 빌드할 때 npm 설치가 실패합니다.

node-gyp 및 libpq를 다시 빌드할 때 npm 설치가 실패합니다.
> [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 삭제 후 재설치
  • 내가 오랫동안 잊어버린 다른 것들

내가 아는 작은 팁: 제거된 패키지 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를 오염시킵니다.

관련 정보