NPM : "npm 링크"모듈을 찾지 못한 후


88

NodeJS를위한 두 개의 모듈을 개발 aligatoraligator-methods입니다. 첫 번째는 이름이 지정 되고 두 번째는 . 두 번째는 첫 번째 작업에 달려 있습니다. 이 두 모듈을 동시에 개발 중이며 전역 링크를 원 aligator하므로 npm 레지스트리에있는 것처럼 사용할 수 있고 방금 전역 적으로 설치했습니다. 이를 수행하려면 NPM 문서에 사용해야한다고 나와 npm link있지만 작동하지 않습니다.

package.json모듈 파일 aligator:

{
  "name": "aligator",
  "version": "0.0.1",
  "description": "",
  "main": "index.js",
  "private": true,
  "directories": {
    "doc": "docs",
    "example": "examples",
    "test": "spec"
  },
  "scripts": {
    "test": "gulp jasmine"
  },
  "license": "MIT",
  "devDependencies": {
    "gulp": "^3.6.2",
    "gulp-jasmine": "^0.2.0",
    "gulp-jshint": "^1.6.1",
    "gulp-rename": "^1.2.0",
    "jasmine-node": "^1.14.3"
  },
  "dependencies": {
    "bluebird": "^1.2.4",
    "lodash": "^2.4.1",
    "mathjs": "^0.22.0"
  }
}

package.json모듈 파일 aligator-methods:

{
 "name": "aligator-methods",
 "version": "0.0.1",
 "description": "",
 "main": "index.js",
 "private": true,
 "directories": {
   "doc": "docs",
   "example": "examples",
   "test": "jasmine"
 },
 "scripts": {
   "test": "gulp jasmine"
 },
 "author": "",
 "license": "MIT",
 "devDependencies": {
   "gulp": "^3.6.2",
   "gulp-jasmine": "^0.2.0",
   "gulp-jshint": "^1.6.1",
   "gulp-rename": "^1.2.0",
   "jasmine-node": "^1.14.3"
 },
 "dependencies": {
   "lodash": "^2.4.1",
   "mathjs": "^0.22.0",
   "aligator": "^0.0.1"
 }
}

우선 모듈을 전역 적으로 연결했습니다.

$ cd ~/aligator
$ npm link
/usr/local/lib/node_modules/aligator -> /Users/roc/aligator

내가 실수하지 않았다면 이것은 내 모듈의 글로벌 참조를 생성 aligator했으며 이제 컴퓨터에서 원하는 모든 곳에서이 모듈을 사용할 수 있습니다.

그런 다음 다른 모듈로 이동하여 종속성을 설치하려고 시도했지만 다음과 같은 결과를 얻었습니다.

$ cd ~/aligator-methods
$ npm install
npm ERR! 404 404 Not Found: aligator
npm ERR! 404
npm ERR! 404 'aligator' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it
npm ERR! 404 It was specified as a dependency of 'aligator-methods'
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, or http url, or git url.

npm ERR! System Darwin 13.2.0
npm ERR! command "node" "/usr/local/bin/npm" "install"
npm ERR! cwd /Users/roc/aligator-methods
npm ERR! node -v v0.10.28
npm ERR! npm -v 1.4.16
npm ERR! code E404
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/roc/aligator-methods/npm-debug.log
npm ERR! not ok code 0

나는 그것을 직접 연결하려고 시도했다.

$ cd ~/aligator-methods
$ npm link aligator
/Users/roc/aligator-methods/node_modules/aligator -> /usr/local/lib/node_modules/aligator -> /Users/roc/aligator

그러나 그것도 작동하지 않았습니다.

무슨 일이 일어날 수 있는지에 대한 생각이 있습니까? 나는 Homebrew에 의해 만들어 졌기 때문에 노드npm의 설치와 관련이있을 수 있다는 것을 어딘가에서 읽었습니다. 그래서 가끔 사용해야하는데 sudo.


게시 된 코드에서는 첫 번째 모듈의 이름이 철자로 aligtor되어 있고 두 번째 모듈에서는 aligator. 또한 종속성이 충돌 할 수도 있습니다.
Bruno Toffolo

@BrunoToffolo 네, 맞아요.하지만이 경우 게시물의 철자 오류 일뿐입니다. 고마워요.
Roc

웹팩 설정을 속이는 내 비참한 삶의 4 시간을 잃었습니다 : / 당신은 내 생명을 구했습니다! +1
Tom Sarduy

8
와우 내가 가진 동일한 문제가 있었다 main나의의를 package.json, 당신의 수정과 답을 업데이트 해 주셔서 감사합니다!
mattyb 2011-06-11

답을 찾았다면 답으로 게시하고 그 답으로 해결 된 질문을 설정하는 것이 좋습니다. :)
Alberto S.

답변:


39

NVM으로 인해이 문제가 발생하여 종속성에 대해 하나의 노드 버전을 실행하고 종속 항목에 대해 다른 버전을 실행했습니다.


1
당신이나 다른 사람이 우연히이 문제를 해결할 수있는 위치에 연결할 수 있습니까?
Kevin Danikowski

4
제 경우에는 두 패키지 모두에서 'nvm use <VERSION>'을 실행해야합니다. 여기서 VERSION은 두 패키지 모두에 동일합니다.
linuxdan

29

삭제 package-lock.json한 다음 npm install다시 실행 하면 문제가 해결되었습니다.


2
현재 문제를 해결할 수 있지만 더 큰 문제가 발생할 수 있습니다. 잠금 파일은 매우 중요한 역할을 하므로 삭제 해서는 안됩니다 . 요컨대 각 팀원이 정확히 동일한 종속성을 사용하도록 보장하는 메커니즘입니다. 스택 오버플로에서이 답변을 확인할 수 있습니다. stackoverflow.com/questions/54124033/… 그러나 문서에 존재하는 이유를 읽는 것도 좋은 시작입니다. docs.npmjs.com/files/package-lock.json
SKuijers

이것이 완전히 최후의 수단이되어야 함을 나타내는 굵은 글씨로 된 메모가 있으면이 답변을 기꺼이 올릴 것입니다. @SKuijers가 지적했듯이 잠금 파일은 종속성 버전을 유지하는 데 필수적인 역할을합니다. 아마도 종속성 버전도에서 잠겼 package.json지만 대부분의 경우이 package-lock.json또는 yarn.lock그에 대한 게이트 키퍼였습니다.
FrostyDog

28

문제는의 main속성이 package.json존재하지 않는 파일을 가리키는 것입니다. 여러 가지 이유로 문제가 발생할 수 있으므로 다른 답변을 확인하십시오.


omg 나는 이것을 50 번 upvote하고 각 upvote에 대해 한 번씩 facepalm을하고 싶습니다.
Ben

프로젝트에 main. 대부분 나는 그것없이했지만, 이러한 사소한 문제가 발생한다고 생각합니다.
cst1992

좋은 발견! 나는 당신의 대답을 보았고 이것이 내 문제라는 것을 즉시 알았습니다. :).
slashp

11

디렉토리 npm link에서 처음 실행할 때 aligator전역 node_modules 디렉토리에서 aligator. 그런 다음 디렉토리 npm link aligator에서 를 실행할 때 로컬에 설치된 node_modules에서 원본 소스로 aligator-methods링크 aligator합니다 (위의 예제에 표시된 출력). 이 작업이 완료되면 이미 "설치"되었으므로 더 이상 설치할 필요가 없습니다. npm link aligator명령 을 실행 한 후 어떤 오류가 표시 됩니까?

로컬 디렉토리에서 종속성을 설치하려는 경우 npm install대신 사용 을 시도 할 수 있습니다 . 예를 들면 :

$ cd ~ / aligator-methods
$ npm install ../aligator


5
이 문제를 해결하기 위해 노력해 주셔서 감사합니다. 내 npm link오류가 표시되지 않았습니다. 제 경우의 문제는 속성 main이 존재하지 않는 파일을 가리키는 것입니다. 내 npm install말이 맞아, 나는 아무것도 설치할 필요가 없었습니다 npm link. 내가 몰랐던 것에 대해 감사합니다.
Roc

1
동일한 문제가 있지만 해결책을 찾지 못했습니다. 연결된 각 패키지를 개별적으로 요구하려고하면 하나만 제외하고 모두 작동합니다. 작동하지 않는 패키지는 다음과 같이 말합니다. "오류 : '모듈을 찾을 수 없습니다. -i-just-linked ' ".
Michael

@Michael은 실패한 모듈을 "동적으로"요구하려는 더 깊은 디렉토리에 중첩 된 모듈이있는 것 같습니다 (예 : require ()에 전달 된 문자열의 이름이 모듈에 전달됨). 따라서 npm을 수행해야했습니다. 더 깊은 디렉토리에 링크하십시오.
Michael

4

내 문제는 repo A가 사용 npm하고 repo B가을 사용 하고 있다는 것이 었 yarn으므로 yarn linkrepo B를 통해 npm link package-namerepo A로 가져 오기 위해 repo B에서 실행 해야했습니다 .


당신은 내 하루를 만들었습니다! 감사합니다
Alec

2

이 문제의 내 버전을 수정합니다. npm v5.3.0에서는 node_modules다른 프로젝트에 연결하는 저장소에서 제거 했습니다.

npm v3 이후에는 모든 node_modules 종속성을 하나의 node_modules 디렉토리 (프로젝트에있는 하나)에 배치하여 최대한 구조를 평평하게 만들려고한다는 것을 발견했습니다 ( http://codetunnel.io/npm-5-changes-to-npm -링크 / ).


2

나를 위해 일한 것은 다음과 같습니다.

  1. node_modules종속성 및 소비자 모듈 모두에서 삭제하십시오 .
  2. 운영 npm unlink --no-save [dependency-module]
  3. npm-link에 따라 2-link 명령으로 다시 연결

이제 게시되지 않은 모듈을 로컬에서 완전히 테스트 할 수 있습니다.

또한 강력하지는 않지만 게시되지 않은 모듈을 테스트하는 데 도움이되는 npm pack 명령이 있습니다.

npm- 팩


1

나에게 이것은 내 로컬 패키지 의 버전 번호 를 0.1.0에서 0.0.1로 였을 때 발생했습니다 . 그리고이 패키지에 링크 한 프로젝트에서는 여전히 더 높은 버전 번호를 사용하고있었습니다. 종속성을 업데이트 package.json하면 수정되었습니다.


0

peerDependency를 사용하는 경우

두 개의 패키지 stejs, 및 stejs-loader. stejs-loaderstejsA와 peerDependency. 언제 실행 npm link stejs-loader하고 npm link stejs내 프로젝트에서 나는 오류 얻고 있었다 stejs-loader찾을 수 없습니다를 stejs. npm link stejs의 디렉토리에서 실행 하여 수정했습니다 stejs-loader.


0

tsconfig moduleResolution 확인

나처럼 tsconfig modulees5에서 esnext또는 다른 moduleResolution것으로 변경했다면 기본값이 변경되었을 수 있습니다.

moduleResolution"node"로 설정 하지 않으면 typescript는 node_modules 패키지를 확인하지 않습니다.

당신은에서 읽을 수있는 컴파일러 옵션 기본값의 값에 따라 달라집니다 방법에 대해 페이지 module차례로 기본값에 따라 달라집니다, target그러나 아마 명시 적으로 "노드"로 설정 -.

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