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


616

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)

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


8
node_modules디렉토리는 alongisde, 프로젝트의 루트에 될 것으로 예상된다 app.js귀하의 경우. 왜 ..npm 설치 경로 를 사용 했 습니까?
Alex Wayne

1
"npm install ../faye"를 "npm install ../faye/build"로 변경하면 예상대로 작동합니다. 나는 이것이 얼마나 전형적인 지 모르겠지만, faye는 빌드 디렉토리를 만들 때 package.json 사본을 넣습니다. npm은 루트 수준에서 package.json에 대해 불평하지 않지만 해당 수준에 존재하지 않는 파일을 참조합니다.
Dave Causey

2
문제를 해결했지만 실제 질문에 대한 해결책을 얻지 못했습니다.이 문제를 해결하는 방법이었습니다. 초보자 가이 상황을 쉽게 피할 수 있도록 npm 및 / 또는 노드를 개선하기위한 몇 가지 제안을 생각해 보겠습니다.
Dave Causey

1
링크 를 통해 모듈을 정확히 조회하지 못한 위치와 같은 아이디어를 얻을 수 있습니다.
Amol M Kulkarni

1
설치 한 폴더와 같은 폴더에있는 날씨를 확인하십시오. 전 세계에 설치하지 않은 경우.
Ashwani Panwar

답변:


513

를 사용 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에 의존 할 수 없다는 것이 분명합니다.


264
"일반적으로 대부분의 패키지를 로컬로 설치하여 프로젝트 코드와 함께 체크인되도록합니다." 일반적으로 package.json의존하는 npm 모듈을 나열하고 node_modules폴더를 무시하는 것이 좋습니다. 그런 다음 npm installrepo를 복제 한 후 설정을하십시오.
Alex Wayne

53
package.json종속성 을 나열하는 것 외에도 , 내가 의존하는 것의 좋은 복사본을 알고 싶습니다. 디스크 공간이 저렴하고 npm 또는 패키지가 npm에서 사라지면 여전히 리포지토리에서 완전히 작동하는 프로젝트가 있습니다.
Bill

165
나는 오래된 개발자로서 Node devs의 "패러다임"을 읽었을 때 "디스크 공간이 저렴하다"고 거의 질식했다. 사용중인 라이브러리가 있습니다. 100 부 (또는 NEAR 부)를 가질 수 있다는 생각으로 배가 돌아갑니다. 디스크 공간은 저렴하지만 유지 관리 시간이 비쌉니다. 일회성 장난감 프로젝트를 수행하는 경우 유지 관리 비용이 저렴합니다. 그러나 실제 작업의 경우 유지 관리 비용이 많이 들고 디스크 공간 비용과 관련이 없습니다.
Lloyd Sargent

66
나는이 마지막 의견을 정말로 이해하지 못한다. 프로젝트에 의존하는 코드의 사본 하나를 갖기 위해 코드 사본을 100 개 가지고 있다고 말하는 사람은 없습니다. 대안은 NPM 또는 종속성이 언젠가 사라지면 작동하지 않는 프로젝트를 갖는 것입니다. 처음부터 종속성을 다시 작성하는 것도 꽤 비싸다고 생각합니다. 따로, 저는 10 년 동안 Microsoft에서 근무했으며 항상 소스 트리에 타사 종속성을 확인했습니다.
Bill

33
@LloydSargent "복사본 근처" 더 나쁘지 는 않습니다. 각 프로젝트에는 사용자가 정의한 특정 종속성이 있고 나머지 코드가 의존하기 때문에 더 좋습니다 . 여러 프로젝트 에서 동일한 버전을 가지고 있다면 무엇이든 업데이트 하면 모든 것을 업데이트 해야합니다 . 종속성을 고정하면 부분 업그레이드가 가능해 유지 보수가 줄어 듭니다. 실제 작업, 장난감이 아닌 프로젝트.
Dave Newton

459

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

rm -rf node_modules
npm install

13
나는 또한 안전과 마찬가지로 npm 캐시를 깨끗하게 할 것입니다 :)
Tony Tai Nguyen

1
이상한 종속성 문제가 나타날 때마다 npm install/ npm update해결되지 않는 좋은 첫 번째 문제 해결 단계 일 것입니다. 이를 통해 Error: Cannot find module 'http-errors'Express 앱을 실행하려고 할 때 무작위로 표시 되는 문제가 해결되었습니다 .
매트 부 카스

놀라운 @carelesslyChoosy의 답변으로 누락 된 종속성이 해결되었습니다. npm install을 사용하여 업그레이드하고 다운 그레이드하는 것이 깔끔하지 않습니다.
eel ghEEz

3
여기서 누락 된 단계는 실행하기 전에 package-lock.json 파일을 제거하는 것 npm install입니다.
Rick Quantz

이것은 나를 위해 작동하지 않았다, 심지어 컴퓨터를 다시 시작;)
Jason G

83
npm install --save module_name

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

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

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


1
전 세계적으로 설치했을 때 npm / node-modules 폴더가 비어 있었고 사용하려고했지만 ng new project-name일부 모듈이 누락되었음을 보여주었습니다 ... 각 주어진 명령을 사용하여 설치해야했습니다. 그런 다음 문제를 해결했지만 모든 명령을 한 번에 설치하는 단일 명령이 있습니까?
Vishal Nair 2016 년

25

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

npm install @types/node --save-dev

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


18

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

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


16
이것은 나를 위해 문제를 진단했습니다. 나는 npm cache clearnode_modules를하고 지운 다음 npm install문제를 해결했습니다.
meklarian

9

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를 다시 시작하여 문제를 해결했습니다. 또한 시작 스크립트도 수정해야합니다.


어떻게 확인합니까?
tamj0rd2

8

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


나는 즉각적인 문제를 해결하면서 이것을 upvoted 하고이 node.js 문서로 안내했다 . 그러나 나는 문서가 모듈을 찾기위한 대안 전략을 나타 내기 때문에 이것은 담요 답변이 아니라고 생각합니다.
Graham Klyne

6

어제이 오류가 발생했습니다. main항목 package.json이 내가 이동 한 파일을 가리키고 있음을 깨닫기 까지 시간이 걸렸습니다. 오류가 사라지고 패키지가 작동한다는 것을 업데이트하면.


2
성스러운 암소 ... 절망에서 "오류 : 모듈을 찾을 수 없습니다"를 Google에 입력 하고이 질문을 찾았습니다. 당신의 대답은 내 문제를 해결했습니다. 그런 모호한 검색어가 정답을 찾았다는 것을 믿을 수 없습니다. 당신과 구글에게 좋은 소식!
Jamon Holmgren

1
아주 많이 요 main저장소에서 제외 된 디렉토리에서 하위 모듈 의 항목 을 가리켜 서 포함시킬 npm install때 작동했지만 필요한 경우 내보내기를 찾을 수 없었습니다! 이 명백하지만 유용한 답변에 감사드립니다.
Dragos 2019

고마워 나는 원사 작업 공간을 사용하는 동안이 상황을 겪었으므로 경로 분석 알고리즘과 모든 종류를 살펴 보았습니다. :) 오류 메시지가 모듈을 '찾는 중'이라고 말하면서 ESLint도 비슷한 오류 메시지를 표시했습니다. 그리고 나는 당신의 대답을보고 내가 어리 석다는 것을 깨달았습니다. 감사!
Mark Birbeck

5

node_module프로젝트에서 루트 폴더를 제거하십시오 (예 :) myApp. myApp폴더로 이동 한 다음 터미널에서 아래 명령을 입력하십시오

>myApp>npm install

프로젝트에 필요한 모든 종속성 모듈을 설치합니다.


제공하는 솔루션에 대한 설명을 조금 더 추가하여 답변을 더 자세히 설명해 주시겠습니까?
abarisone

5

package.json에 require누락되거나 잘못된 main필드 가있는 모듈을 사용하는 경우이 오류가 발생할 수 있습니다 . 모듈 자체가 설치되어 있지만 npm / node는 단일 .js 파일을 모듈의 진입 점으로 사용해야합니다. 는 IF main필드 거기, 기본값을 찾는 것입니다 index.js모듈의 폴더에. 모듈의 주요 파일이 경우 하지 하는 index.js라고는 할 수 없습니다 require그것.

browserify기반 모듈을 CommonJS 가능 모듈로 전환하는 중에 발견 되었습니다 require. browserify누락 된 main필드를 신경 쓰지 않았 으므로 오류가 눈에 띄지 않았습니다.


4

node_modules 폴더 안에있는 restler 폴더의 경로를 다음과 같이 지정하십시오. var rest = require ( './ node_modules / restler');

이것은 나를 위해 일했습니다.


3

typescript를 사용하고 있고 모든 노드 모듈을 설치 한 후 오류가 발생하면를 제거하십시오 package-lock.json. 그런 다음를 실행하십시오 npm install.


2

프로 팁 :

이 오류는 내가 node blah대신 입력했기 때문에 피로와 가벼운 질병과 싸우는 동안 나에게 일어났습니다 npm blah.

받은 오류 메시지는 저의 어리 석음에 대해 경고 할 정도로 화를 내지 않았습니다.


2

package.jsonSVN 에서 팀의 다른 사람이 업데이트 할 때도 같은 문제에 직면했습니다 . node_modules디렉토리를 완전히 제거해도 도움이되지 않았습니다. 문제를 해결하는 방법은 다음과 같습니다.

rm -rf node_modules
rm package.json
rm package-lock.json
svn up
npm install
ng build --env=prod

이것이 누군가를 돕기를 바랍니다!


알림 주셔서 감사합니다. 내 경우에는 package-lock.json이 다시 엉망이되었지만 node_modules를 삭제 한 후 npm install모든 것을 다시 실행 하는 것이 좋습니다.
TaeKwonJoe '

6
제거 할 경우 package.jsonNPM은 무엇을 설치할지 어떻게 알 수 있습니까?
Michał

1

확인할 곳을 하나 더 추가 할 수 있습니다. 내가 사용하려는 패키지는 개인 NPM 저장소에 게시 한 내 패키지 중 하나였습니다. package.json에서 'main'속성을 구성하는 것을 잊었습니다. 따라서 패키지는 소비 패키지의 node_modules 폴더에 있지만 "모듈을 찾을 수 없습니다"라는 메시지가 나타납니다. 내 실수를 깨닫기 위해 몇 분 걸렸다. :-(


1

필자의 UNMET PEER DEPENDENCY redux@^3.0.0경우이 오류 메시지 가 발생했습니다. 모두 참조하고 --save를 사용하여 누락 된 모듈을 다시 설치하십시오.

npm install redux --save

1

node / npm을 제거한 다음 안정 버전 (최신 버전 아님)을 다시 설치하면 효과적입니다.

sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*}

https://nodejs.org/en/download/


0

내 패키지를 게시 한 다음 다른 프로젝트에 포함하려고했습니다. 첫 번째 모듈을 구축 한 방식으로 인해 문제가 발생했습니다. ES2015 내보내기를 사용하여 모듈을 만듭니다. 예를 들어 모듈이 다음과 같이 표시됩니다.

export default function(who = 'world'){
    return `Hello ${who}`;
}

Babel로 컴파일 한 후 게시하기 전에 :

'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});

exports.default = function () {
    var who = arguments.length <= 0 || arguments[0] === undefined ? 'world' : arguments[0];


    return 'Hello ' + who;
};

그래서 npm install module-name다른 프로젝트 (ES2015 없음)에서 나는해야했습니다.

var hello = require('module-name').default;

실제로 패키지를 가져 왔습니다.

희망이 도움이됩니다!


0

webpack와 함께 사용 하는 동안이 문제가 발생했습니다 webpack-dev-middleware.

하나의 파일폴더 로 만들었습니다 .

감시자가 새 폴더를 보지 못하고 모듈이 누락되었습니다.

프로세스를 다시 시작하여 수정되었습니다.


0

누군가에게 유용하고 붉은 청어와 같은 비정상적인 시나리오를 발견했습니다.

또한 모듈을 찾을 수 없음 오류가 발생했지만 이상하게도 로컬 (Mac 호스팅) Node.js 환경에서 모든 것이 완벽하게 작동했습니다. 이 문제는 코드가 Linux 서버에 배포 된 경우에만 나타납니다.

글쎄 ... 맥 기반 Node.js 설치는 무시해도 좋을 것 같은 오타로 밝혀졌습니다.

포함은 다음과 같습니다.

var S3Uploader = require('./S3Uploader.class');

그러나 실제 파일 이름은 "s3Uploader.class.js"입니다.

코드와 파일 이름 사이의 's'와 'S'의 대소 문자 차이를 확인하십시오.

따라서 다른 해결책으로도 문제를 해결하지 못할 가능성이 있으므로 포함 된 파일 이름의 문자를 잘못 입력하지 않았는지 세 번 확인하십시오! :)

그리고 DUH!


1
기본적으로 osx 파일 시스템 (HFS +)은 대소 문자를 구분하지 않습니다 ... 오래 전에 발견되었지만 확실히 구성 가능
giulp

0

어쩌면 나와 같이 '보기 엔진'을 존재하지 않는 엔진으로 표현하거나 등록되지 않은 템플릿 엔진을 사용하려고했습니다. 다음을 사용하십시오. app.engine('engine name',engine) app.set('view engine','engine name')


0

새 CLI v3을 설치하십시오 (npm install -g ionic @ latest).

이 문제가 여전히 CLI v3에서 문제인 경우. 감사합니다!


0

패키지가 성공적으로 설치되면 node_modules 폴더로 이동 한 다음 파일과 경로를 확인하십시오. 그런 다음 가져옵니다. 도움이 되었기를 바랍니다.


-3

우선, 내 대답의 일부는 OP에 의해 게시 된 오류 를 해결하는 데 도움이됩니다 . 둘째, 아래 단계를 시도한 후 몇 가지 다른 오류가 발생하여 그 해결책도 작성했습니다.

(Psst! 위의 오류를 해결하는 데 성공적으로 도움이되었는지, 또는 규칙 또는 응답 형식을 어겼는지 확실하지 않지만 위의 오류와 다른 오류에 직면하여 찾는 데 많은 시간이 걸렸습니다. 다른 사람도 이러한 오류에 직면하면 여기에서 해결책을 얻을 수 있기 때문에 완벽한 솔루션을 작성하고 있습니다.)

PrashanthiDevi 에서 제공하는 답변을 추가하고 정교화하고 내 개인적인 경험을 추가하면 다음과 같습니다.

나는 전체 e2e 및 단위 테스트 부분에 익숙하지 않습니다. 나는 각도기 에서이 부분을 살펴보기 시작했습니다 . 이제 테스트가 작성된 파일이 이미 있었지만 테스트를 실행해야했습니다.

난 이미 필요한 모든 소프트웨어 및 도구를 설치했지만, 내가 처음에 테스트를 실행하는 코드를 실행했을 때, gulp itest나는이있어 '모듈을 찾을 수 없습니다'오류 . SO에 대한 여러 가지 다른 질문을 겪은 후 솔루션을 얻는 데 도움이 될 수 있다고 생각되는 답변을 찾았습니다.

그 사람은 npm install내 프로젝트 폴더에서 명령을 실행하도록 제안했습니다 .

이유는 이 작업을 수행하는이 업데이트하는 것이 었습니다 노드 모듈 에 필요한 필요한 파일과 종속성을 모두와 함께, 우리의 프로젝트 폴더 안에 폴더를.

(아래 부분은이 질문과 관련이 없을 수도 있지만, 내가 직면 한 것과 같은 상황에 처한 사람이 있으면 도움이 될 수 있습니다.)

위의 단계는 분명히 이전 오류를 해결 했지만 새로운 오류를 던졌습니다! 이번에는 오류 Could not find chromedriver at '..\node_modules\protractor\selenium\chromedriver'입니다.

그러나이 오류의 해결책은 나에게 꽤 어리 석고 웃겼습니다. 이미 셀레늄 폴더 에 chromedriver 파일이 있습니다. 그러나 chromedriver 파일이 chromedriver 폴더가 아닌 셀레늄 폴더 안에 있기 때문에 위의 오류가 발생했습니다 . 그래서 chromedriver 폴더를 만들고 chromedriver 파일을 복사하면 내 문제가 해결되었습니다!

또한 오류 : WebDriver 서버 대기 시간이 초과 되면 다음 코드conf.js 파일에 추가 할 수 있습니다 exports.config{}.

seleniumAddress: 'http://localhost:8080/'

도움이 되었기를 바랍니다!


-4

이 문제를 해결하는 간단한 해결책이 있습니다.

C : \ Users \ UserName \ AppData \ Roaming \ npm \을 제거하십시오.

그런 다음 노드를 설치하십시오.

이제 문제가 해결 될 것입니다.


그는 유닉스를 사용하고 있습니다. Windows가 아닙니다.
Saif Al Falah

-4

다음 명령 만 실행하십시오.

npm install

node_modules폴더에 필요한 모든 모듈이 설치됩니다 .


-5
rm -rf node_modules
npm install
npm fund

저를 위해 일합니다.


-38

디렉토리를 변경하고 현재 프로젝트 폴더를 가리킨 다음 "npm install"을 가리 킵니다. .

그러면 모든 종속성과 모듈이 프로젝트 폴더에 설치됩니다.


2
이 답변은 잘못된 것 같지 않습니다. 부정적인 투표는 약간의 편견과 냉소적 인 의견을지지하는 결과라고 생각합니다.
Muqsith

2
그 다운 보트가 너무 많습니다. 완전히 모호하지는 않습니다. 허용되는 답변과 관련이 있습니다. 모든 대답은 npm install올바른 디렉토리에서 수행하는 것 입니다. 그것에 대해 부정적인 점은 없습니다
shinobi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.