[node.js] Node.js를 사용하여“모듈을 찾을 수 없습니다”오류를 어떻게 해결합니까?

GitHub에서 모듈을 풀다운하고 빌드 지침에 따라 다음을 사용하여 기존 프로젝트로 가져옵니다.

> npm install ../faye

이것은 트릭을 수행하는 것처럼 보입니다.

> npm list
/home/dave/src/server
└─┬ faye@0.7.1
  ├── cookiejar@1.3.0
  ├── hiredis@0.1.13
  └── redis@0.7.1

그러나 Node.js는 모듈을 찾을 수 없습니다 :

> node app.js
node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: Cannot find module 'faye'
    at Function._resolveFilename (module.js:334:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:357:17)
    at require (module.js:368:17)
    at Object.<anonymous> (/home/dave/src/server/app.js:2:12)
    at Module._compile (module.js:432:26)
    at Object..js (module.js:450:10)
    at Module.load (module.js:351:31)
    at Function._load (module.js:310:12)
    at Array.0 (module.js:470:10)

나는 여기서 무슨 일이 일어나고 있는지 이해하고 싶지만, 다음에 어디를 볼지에 대해 약간의 손실이 있습니다. 어떤 제안?



답변

를 사용 npm install하면 모듈을 현재 디렉토리 (라는 서브 디렉토리)에만 설치합니다 node_modules. app.js는 아래에 home/dave/src/server/있습니까? 그렇지 않은 경우 디렉토리에서 모듈을 사용하려면을 사용하여 전역으로 설치해야합니다 npm install -g.

나는 일반적으로 대부분의 패키지를 로컬로 설치하여 프로젝트 코드와 함께 체크인되도록합니다.

업데이트 (2019 년 8 월) :

현재 npm이 node_modules 디렉토리를 수정할 때 자동으로 생성되는 package-lock.json 파일을 사용할 수 있습니다 . 따라서 package-lock.json현재 사용중인 node_modules의 정확한 버전을 추적 하므로 패키지 체크인을 생략 할 수 있습니다 . package-lock.json대신 package.json명령 을 사용하여 패키지를 설치하십시오 npm ci.

업데이트 (2016 년 3 월) :

응답에 대한 많은 인내심을 얻었으며 특히 코드가 의존하는 패키지를 체크인했습니다. 며칠 전에 누군가 React, Babel 및 기타 모든 것을 깨뜨린 모든 패키지 ( https://kodfabrik.com/journal/i-ve-just-liberated-my-modules )를 게시 취소했습니다. 프로덕션 코드가 있다면 실제로는 의존성을 유지 관리하는 NPM에 의존 할 수 없다는 것이 분명합니다.


답변

나는 매우 비슷한 문제가 있었다. 전체 node_modules폴더를 제거 하고 다시 설치하면 나에게 도움이되었습니다.

rm -rf node_modules
npm install


답변

npm install --save module_name

예를 들어, 오류가 다음과 같은 경우

{[오류 : ‘/root/.npm/form-data’모듈을 찾을 수 없음] 코드 : ‘MODULE_NOT_FOUND’}

그런 다음 명령을 실행하여이 문제를 해결할 수 있습니다 npm install --save form-data.


답변

타이프 라이터 사용자의 경우, 당신은 가져 오는 경우 노드 모듈 내장 (예 http, pathurl)와 같은 오류를 받고 "Cannot find module "x"다음 오류가 실행 해결할 수 있습니다

npm install @types/node --save-dev

이 명령은 NodeJS TypeScript 정의를 프로젝트로 가져 와서 노드의 내장 모듈을 사용할 수 있도록합니다.


답변

이는 어떤 이유로 인해 첫 번째 npm 설치가 중단되거나 (npm의 SIGINT) 지연 시간이 너무 길거나 데이터가 손상된 경우에 발생합니다. npm 설치를 다시 시도해도 문제가 해결되지 않습니다.

npm 첫 번째 점검에서 문제가 발생했기 때문에 파일을 제거하고 npm 설치를 다시 시작하는 것이 가장 좋습니다.


답변

nvm을 사용하는 경우 다른 라이브러리에 바인딩하는 기존 node_modules가 올바른 Node.js 버전에 맞게 컴파일되었는지 확인하십시오.

같은 오류가 발생했습니다. 그 이유는 다음과 같습니다. 우리는 서버에서 두 개의 앱을 실행하고 있기 때문에 nvm을 사용합니다. 하나는 Node.js 5.6이 필요합니다. Node.js 6. Node.js 6은 apt-get 설치입니다.

또한 pm2 도구를 사용하여 배포합니다.

따라서 기본 설정은 nvm이 적용되지 않을 때 pm2 프로세스가 시작되므로 Node.js (버전 6)의 apt-get 설치를 사용하는 것입니다. 따라서 기본 pm2 데몬은 Node.js 6으로 시작합니다. 포크 모드에서 응용 프로그램을 실행하면 별도의 프로세스에서 시작되고 nvm 설정이 적용됩니다. 클러스터 모드에서 응용 프로그램을 실행하면 비 NVM 환경이 상속됩니다.

따라서 클러스터 모드로 전환하려고 할 때 5.6 용으로 컴파일 된 바인딩이이 메시지와 함께 실패하여 응용 프로그램을 시작하지 못했습니다.

nvm 설정이 적용될 때 pm2를 다시 시작하여 문제를 해결했습니다. 또한 시작 스크립트도 수정해야합니다.


답변

환경 변수 NODE_PATH가 올바르게 설정되어 있고 node_modules 경로를 가리키는 지 확인하십시오. nodejs는이 변수를 사용하여 라이브러리를 검색합니다.