NPM은 모듈 종속성을 설치하지 않습니다


151

이것은 package.json부모 프로젝트에 포함시키는 모듈에 대한 것입니다.

{
  "version": "0.0.1",
  "name": "module-name",
  "dependencies": {
    "express": "3.3.4",
    "grunt": "0.4.1",
    "grunt-contrib-compass": "0.4.0",
    "grunt-contrib-copy": "0.4.1",
    "grunt-contrib-cssmin": "0.4.1",
    "grunt-contrib-jshint": "0.6.3",
    "grunt-contrib-requirejs": "0.4.1",
    "grunt-contrib-uglify": "0.2.2",
    "grunt-contrib-watch": "0.5.1",
    "grunt-express-server": "0.4.1",
    "grunt-karma": "0.4.5",
    "grunt-regex-replace": "0.2.5",
    "request": "2.25.0"
  },
  "scripts": {
    "postinstall": "grunt install"
  }
}

주목해야 할 것은이 모듈은 개인 저장소에 포함되어 있으며 다음 package.json과 같이 부모에 포함시킵니다 ."module-name": "git+ssh://git@myserver:user/module-name.git"


package.json은 포함하는 데 사용하는 라인과 마찬가지로 좋아 보입니다. 오류 메시지가 나타 납니까? 자식이 경로에 있습니까?
poida

1
sa 당 오류가없고, 모듈이 설치되지만 NPM에 의해 설치되지 postinstall않아 로컬 grunt패키지를 찾을 수 없기 때문에 스크립트가 실패합니다
Ahmed Nuaman

1
이 문제는 여전히 2016 년 11 월에 존재합니다. 새 컴퓨터에서 작동중인 모듈을 새로 설치했습니다. @Mohsen의 답변으로 해결되었습니다.
Joe Lapp

답변:


152

꽤 오랫동안 존재했지만 아직 해결 방법이없는 버그가 발생한 것 같습니다. 이 경우 npm 저장소에 공개 된 몇 가지 문제가 있습니다.

첫 번째 사람들은 시도 할 수있는 몇 가지 해결 방법을 나열합니다.

의존성을 첫 번째 수준의 종속 자로 명시 적으로 나열하는 대안 솔루션이 있습니다 (약간의 해킹). 이를 위해서는 목록을 유지해야하지만 실제로는 매우 드물게 수행해야합니다.


1
@ Flame2057 정보가 많지는 않지만 운이 없다는 것을 아는 것이 좋습니다. 계속해서 질문을 작성할 수 있습니다. 커뮤니티가 해결할 지식이 있기를 바랍니다. 즐기세요!
allprog

하나의 추가 단계가 필요했습니다. 프로젝트에서 "종속성"을 마우스 오른쪽 버튼으로 클릭하고 여기에 언급 된 다른 단계를 수행 한 후 "패키지 복원"을 선택해야했습니다 (node_modules 및 package.lock.json을 삭제 한 다음 npm 설치).
Taersious

113

전체 node_modules폴더를 제거 하고 다시 설치 하면 매우 비슷한 문제가 발생 했습니다. IT 크라우드 쇼 에서이 요령을 배웠습니다 !

rm -rf node_modules
npm install

이것은 실제로 나를 위해 일했습니다. 나는 그것이 정말로 이상하다고 생각합니다-그 결함을 일으키는 원인은 무엇입니까? 그럼에도 불구하고 폴더를 삭제하고 npm install을 다시 실행하면 작동합니다. 미리 그 하위 디렉토리에는 아무것도 설치되지 않습니다. 이제 모든 것이 설치됩니다.
CtheGood

감사합니다 @Moshen. 이전 버전의 Node를 제거하고 새로 설치했습니다. 모든 node_modules /를 전체적으로 제거했지만 일부 기존 앱에서 제거하는 것을 잊었습니다. 기존의 각 앱 디렉토리에서 node_modules 폴더를 삭제 한 다음을 실행해야했습니다 npm install.
wilblack

좋은 예전은 " 처음부터 다시 시작해 보셨습니까 ?"입니다. 이것은 나를 위해 잘 작동했습니다.
Marco Aurélio Deleu

해결 방법이 있음을 아는 것이 좋지만 실제로는 '컴퓨터를 다시 부팅 한 후 다시 시도하십시오'라는 문제가 발생하고 실제 문제는 숨겨집니다. NPM 설치와 비슷한 문제가 발생하고 (메시지없이 프로세스가 즉시 종료 됨) 해결 방법 중 하나는 node_modules 폴더를 삭제하고 다시 설치하는 것입니다. 여기에서 무슨 일이 일어나고 있는지 이해한다는 확신을 가지지 못합니다.
Kelly S. French

1
이것은 나를 위해 일했습니다. IT 크라우드 레퍼런스에 대해 다시 +1 할 수있었습니다.
texelate

32

Windows 컴퓨터를 사용하고 있습니다.

  1. node_modules 폴더를 삭제했습니다.
  2. 어떻게 든 package.lock.json 파일이 생성되고 있습니다. 그 파일을 삭제했습니다.
  3. 그런 다음 npm을 설치하십시오.
  4. 깨끗한 빌드.
  5. 운영.

14
이 대답은 더 많은 사랑을 얻어야합니다. package.lock.json 파일이 나를 망치고있었습니다.
mwilcox

16

이 코드를 상속 한 경우 종속성 및 버전이 잠겨 있고 ./npm-shrinkwrap.json 파일이있을 수 있습니다.

해당 파일에 종속성이 나열되지 않으면 npm install명령으로 설치되지 않습니다 .

패키지를 수동으로 설치 한 다음 실행 npm shrinkwrap하여 shrinkwrap 파일을 업데이트해야합니다.


2
package-lock.json노드 8.0.0 및 npm 5.0.0으로 업데이트 한 후 패키지를 수동으로 설치하면 파일 이 생성되는 문제가있었습니다 . 그 후, running npm install은 모든 의존성 대신 하나의 패키지 만 설치합니다. 삭제 package-lock.json하고 다시 실행 npm install하면 문제가 해결되었습니다.
Monkpit 2016 년

1
@ 몽크 핏 그것은 나를 위해 그것을 해결, 감사합니다! package-lock.json방해하고 있었다.
VirtualWolf 2016 년

10

package.json파일이와 같은 디렉토리에 있지 않은 문제에 직면하고있는 것 같습니다 Gruntfile.js. grunt xxx명령 을 실행할 때 다음 과 같은 메시지가 표시됩니다.

Local Npm module "xxx" not found. Is it installed?

현재 해결책은 다음과 같습니다.

  • Gruntfile.js와 동일한 디렉토리에 package.json을 작성하십시오.
  • 그런트 프로젝트에 필요한 모듈 정의
  • npm install로컬로로드하기 위해 실행
  • 이제 필요한 grunt 명령이 작동해야합니다.

IMHO, 우리는 부모 npm 모듈 (예 : 같은 프로젝트 내의 부모 디렉토리에있는 package.json)에서로드 된 grunt resolve 모듈을 가질 수 없다는 것은 슬픈 일입니다. 논의는 여기 가 피할로드 "글로벌"모듈로 이루어 졌음을 나타냅니다 것 같다하지만 우리가 원하는 것은로드 대신 "내 프로젝트"모듈에서 생각합니다.


그래서 이것은 내 부모 프로젝트 (서브 모듈 프로젝트를 가져 오는 것) 의 구조입니다 : cl.ly/image/020E0b3I0t1A 그리고 내 서브 모듈 프로젝트의 구조 : cl.ly/image/2q0L3l1v0s40 ; 당신은 둘 다 같은 레벨에 포함 Gruntfile.js하고있는 것을 볼 수 있습니다 package.json.
Ahmed Nuaman

1
이 문제는 하위 모듈 프로젝트에 종속성을 재귀 적으로 설치하지 않는 grunt문제입니다 npm.
Ahmed Nuaman

9

이전 버전의 노드에서는 OP가 true 일 수 있습니다. 그러나 노드 4.4.1에서도 마찬가지입니다.

사용중인 노드 버전과 잘 연결되어있을 수 있습니다. 최신 버전으로 업그레이드하십시오. 특정 종속성은 노드 버전과 호환되지 않는 경우 전 이적으로로드되지 않습니다.

나는 이것을 실행하여 이것을 발견했다 npm update.

최신 버전으로 업그레이드 한 후 (4.4-> 5.9); 이 문제가 해결되었습니다.


8

내 경우에는 node_modules및 을 제거하는 데 도움이되었습니다 package-lock.json.

그런 다음으로 모든 것을 다시 설치하십시오 npm install.


8

또한 패키지 이름이 올바르게 승인되었는지 확인하십시오.

잘못된:

{
    "name":"My Awesome Package"
}


옳은

{
    "name": "my-awesome-package-name"
}

1
예, 이름에 공백이 있었고 제대로 설치되지 않았습니다.
Ansjovis86

1
공간뿐만 아니라 이름에 사용 된 '-'에 관한 것입니다. 나는 같은 문제에 직면했습니다. 이름에-또는 _를 넣으면 작동합니다.
몰라 그

4

grunt-cli를 설치해야 할 수도 있습니다. npm 설치 전에 다음을 시도하십시오.

sudo npm install -g grunt-cli

grunt가 나를 위해 종료되지 않는 문제를 해결하면 유효한 grunt 파일도 필요합니다.

출처 : https://stackoverflow.com/a/16456467/241294


명령 프롬프트에서 'grunt'명령을 시도하면 어떻게됩니까? 당신의 길에 존재합니까? 당신의 말이 맞습니다. 그것은 당신의 pastebin에서 설치된 것처럼 보입니다. sudo와 -g로 설치 했습니까?
poida

grunt에는 문제가되지 않습니다 :~ ᐅ which grunt /opt/local/bin/grunt
Ahmed Nuaman

차라리 NPM과 실행을 통해보다 REPO 자체를 복제 할 때 또한 npm installgrunt install, 그것을 잘 작동합니다. 문제는 NPM이 다음과 같이 지정된 레포의 의존성을 설치하지 않는 것입니다.package.json
Ahmed Nuaman

어떤 디렉토리에서 패키지 종속성을 찾고 있습니까? 최상위 레벨이 아니라 최상위 레벨 패키지 / node_modules / 모듈 이름 / node_modules에 있어야합니다. grunt가 잘못된 디렉토리에서 작업하고 있기 때문에 grunt 파일을 찾지 못할 수 있습니까?
poida

그것은에 문제가 아니라 grunt당신이 일반적으로 이미 설치되어있는 해당 모듈의 의존성의 끝에서 여름을 제공하는 NPM과 모듈을 설치할 때; 문제의 모듈을 설치할 때 여름에 설치된 의존성 모듈을받지 못합니다.
Ahmed Nuaman

4

누군가 가이 곤경에 시달리고 내가했던 것과 똑같은 asanine 실수를하는 경우를 대비하여 여기에 내 사건이 있습니다. 한 시간 동안 벽에 머리를 대고 난 후, json이 잘못 중첩되어 있고 "종속성"키가 "저장소"키 안에 있다는 것을 깨달았습니다.
말할 것도없이, 오류가 없었으며, 모듈이 설치되지 않았습니다.


3

이 문제를 해결하는 또 다른 방법은 이것을 모듈 package.json스크립트 섹션에 추가하는 것입니다

"preinstall": "npm install {Packages You depend on}"

이것이하는 일은 모듈에 필요한 모든 패키지를 설치하고 해당 오류가 발생하지 않는 것입니다.


3

이전 노드 버전에서 발생합니다. 다음과 같은 최신 버전의 노드를 사용하십시오.

$ nvm use 8.0
$ rm -rf node_modules
$ npm install
$ npm i somemodule

편집 : 또한 확인하십시오 save.
예 :npm install yourmoduleName --save


2

Windows에 깨끗한 Node dev 환경을 설치할 때이 오류가 발생했습니다.

이 문제를 해결하기 위해 새 프로젝트 디렉토리 (방금 만든 스캐 폴딩 yo angular)로 이동하여 두 가지 명령을 입력했습니다.

npm install -g grunt --save-dev

그러면 로컬 grunt 의존성이 프로젝트에 설치됩니다. 다음:

npm install

그러면 모든 (새로운) 프로젝트 종속성이 설치됩니다.

타다!


2

의존성이 (의 반대 ) dependencies부분에 있어야한다는 것을 언급 할 가치가 있습니다 .package.jsondevDependencies

내 문제는 기본적으로 OP와 동일했습니다.

  • 다른 리포지토리 repo1를 통해 개인 리포지토리 (호출하자) 설치 (호출 "module-name": "git+ssh://git@myserver:user/my-repo-name.git"하자 repo2)
  • 에서 repo2의 ' node_modules에서 하나의 패키지 의존성은 repo1없었다.
  • 내 바보 같은 실수! .. 대신에 repo1그 의존성을 나열하고 있었다devDependenciesdependencies
  • 내에서 종속성 이동 repo1package.json에서 devDependenciesdependencies
  • 내에서 repo2, 나는 내 를 제거 node_modules했고 package-lock.json, 성공 npm install했습니다! ... 의존이있었습니다!

npm install 명령 위의 Dockerfile에서 NODE_ENV = production 환경 변수를 선언했는데 devDependencies가 설치되지 않습니다.
Pieter De Clercq

0

나는 같은 문제가 있었다. 그러나 동일한 컴퓨터에서 하나의 프로젝트에는 좋은 package.json이 있었고 모든 종속성이 성공적으로 설치되었습니다. 그리고 다른 프로젝트에서 내 package.json 종속성은 내가 무엇을 하든지 설치되지 않았습니다. 방금 package.json을 복사하여 다른 프로젝트에 붙여 넣었습니다. 그리고 효과가있었습니다! 내가 찾은 차이점은 파일 시작 부분에 빈 줄뿐이었습니다. 모르거나 다른 것에 영향을 줄 수 있습니다. 그러나 문제는 package.json 파일뿐이었습니다.


0

나는 또한이 문제에 직면했다고 생각하며, 내가 찾은 최고의 해결책은 내 콘솔을보고 발생한 오류를 파악하는 것이 었습니다. 그래서 나는 그것을주의 깊게 읽고 문제는 내가 내 저장소, 설명 및 유효한 이름을 지정하지 않았다는 것을 알았습니다 package.json. 나는 그 정보를 추가했고 모든 것이 정상이었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.