로컬 모듈을 npm 패키지 종속성으로 지정하는 방법


267

의존성 아래 package.json 파일에 지정된 타사 모듈 (예 : 'express')에 대한 일반적인 종속성 세트가있는 응용 프로그램이 있습니다. 예 :

"express"     : "3.1.1"

내 코드를 모듈 식으로 구성하고 package.json에 의해 로컬 (현재있는 파일 시스템에서 의미) 모듈 세트를 설치하고 싶습니다. 다음을 실행하여 로컬 모듈을 설치할 수 있음을 알고 있습니다.

npm install path/to/mymodule

그러나 package.json dependencies 구조를 통해이를 수행하는 방법을 모르겠습니다. --save이 명령 에서 옵션을 사용하면 단순히 "mymodule": "0.0.0"package.json 에 넣 습니다 (파일 경로 위치를 참조하지 않음). 그런 다음 node_modules에서 설치된 버전을 제거하고 package.json에서 다시 설치하려고하면 실패합니다 (중앙 레지스트리에서 "mymodule"을 찾고 로컬로 보이지 않기 때문에).

나는 "dependencies": {}이것이 파일 시스템 경로에서 설치되기를 원하는 구조를 알려주는 방법이라고 확신 하지만 방법을 모른다.

다른 사람 이이 문제가 있었습니까? 감사.


1
정말 좋은 질문입니다. package.json우리가 가진 것과 동등한 기능이 없다는 것을 알고 슬프다 Gemfile.
Jarl

답변:


405

npm install 이제 이것을 지원합니다

npm install --save ../path/to/mymodule

이를 위해서는 mymodule자체 모듈을 사용하여 모듈을 구성해야합니다 package.json. NodeJS 모듈 작성을 참조하십시오 .

npm 2.0부터는 로컬 종속성이 기본적으로 지원됩니다. 비슷한 질문에 대한 danilopopeye의 답변을 참조하십시오 . 이 질문이 웹 검색 결과에서 매우 높은 순위에 올랐으므로 여기에 그의 답변을 복사했습니다.

이 기능은 npm 버전 2.0.0에서 구현되었습니다. 예를 들면 다음과 같습니다.

{
  "name": "baz",
  "dependencies": {
    "bar": "file:../foo/bar"
  }
}

다음 경로 중 하나도 유효합니다.

../foo/bar
~/foo/bar
./foo/bar
/foo/bar

업데이트 동기화

이후 npm install사본 mymodulenode_modules, 변화 mymodule의 소스가 자동으로 종속 프로젝트에서 볼 수 없습니다.

종속 프로젝트를 업데이트하는 두 가지 방법이 있습니다

  • 버전을 업데이트 한 mymodule후 다음을 사용npm update 하십시오. 위에서 볼 수 있듯이 package.json"종속성"항목에는 일반 종속성과 같이 버전 지정자가 포함되어 있지 않습니다. 대신, 지역 종속성, npm update단지 확인을 시도 최신 의 결정에 따라 버전이 설치되어 mymoduleS ' package.json. 이 특정 문제에 대한 chriskelly의 답변을 참조하십시오 .

  • 을 사용하여 다시 설치하십시오 npm install. 이렇게하면 mymodule소스 경로에있는 것이 무엇이든 , 이전 버전이거나 대체 분기가 체크 아웃 된 경우에도 설치됩니다.


2
이것은 나를 위해 일했습니다. (난 그냥 같은 로컬 상대 경로 않았다"mymodule":"file:mymoduledir"
돈 Rhummy

72
npm install --save ../my-local-repo
Ivan Rave

15
프로젝트에서 어떻게 사용합니까? 처럼 호출하려고하는데 import { HelloWorld } from "my-test-lib";"Cant find module"오류가 발생합니다. , 살펴 보시기 바랍니다 stackoverflow.com/questions/46818083/...을
Vitalii 밸 시렌 코에게

6
@LucioMollinedo 로컬 모듈을 가져온 방법에 대한 구문을 공유 할 수 있습니까? Vitallii와 마찬가지로 다음과 같은 오류가 발생합니다import { HelloWorld } from "my-test-lib";
Stan James

7
의존성이 프로젝트에 설치되지 않기 때문에 이것은 패키지를 참조하는 것과 동일하지 않습니다
Glass Cannon


11

결국 깔끔한 방법을 찾을 수 없으므로 디렉토리를 만들고 local_modulesbashscript를 scripts-> preinstall의 package.json에 추가했습니다.

#!/bin/sh
for i in $(find ./local_modules -type d -maxdepth 1) ; do
    packageJson="${i}/package.json"
    if [ -f "${packageJson}" ]; then
        echo "installing ${i}..."
        npm install "${i}"
    fi
done

5

npm link로컬 모듈을 레지스트리에 게시하거나 node_modules 폴더에 별도의 복사본을 유지하지 않고 로컬 모듈을 개발하기위한 제안 된 솔루션 이라는 명령으로 많은 어려움을 겪은 후이 문제를 해결하기 위해 작은 npm 모듈을 만들었습니다.

수정에는 두 가지 쉬운 단계 가 필요 합니다 .

먼저:

npm install lib-manager --save-dev

둘째, 이것을 다음에 추가하십시오 package.json:

{  
  "name": "yourModuleName",  
  // ...
  "scripts": {
    "postinstall": "./node_modules/.bin/local-link"
  }
}

자세한 내용은 https://www.npmjs.com/package/lib-manager 에서 확인하십시오 . 그것이 누군가를 돕기를 바랍니다.


0

node_modules에 사전 설치된 모듈을 다른 파일과 함께 게시 할 수 있다면 다음과 같이 할 수 있습니다.

// ./node_modules/foo/package.json
{ 
  "name":"foo",
  "version":"0.0.1",
  "main":"index.js"
}

// ./package.json
...
"dependencies": {
  "foo":"0.0.1",
  "bar":"*"
}

// ./app.js
var foo = require('foo');

모듈을 git에 저장하고 부모 package.json에게 git의 종속성을 설치하도록 지시 할 수 있습니다 : https://npmjs.org/doc/json.html#Git-URLs-as-Dependencies


5
불행히도 그것은 내 로컬 모듈과 타사 / 기여 모듈이 동일한 디렉토리의 레지스트리 (예 : connect)에 설치된 node_modules와 관련이 있습니다. Git / VCS 관점과 혼동되는 것 외에도 (즉, 내가 만든 것을 제외하고 node_modules의 모든 것을 무시해야 함) 나쁜 습관입니다 (내가 작성하고 게시하지 않은 사람들은 다른 사람들이 작성하고 게시 한 것들과 별도로 유지해야합니다) ).
Sam Adams

로컬 모듈을 추가 할 때 변경하면 기본 앱에서 볼 수 없습니다. 왜 이런 경우입니까?
Mark Tyers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.