package.json의 로컬 종속성


454

그래서, 이런 일을하고 싶지 npm install도 설치 package.json../somelocallib종속성 또는 더 중요한 것은.

"dependencies": {
    "express": "*",
    "../somelocallib": "*"
}

답변:


584

npm> = 2.0.0

이 기능은 npm 버전 2.0.0에서 구현 되었습니다. 예:

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

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

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

로컬 패키지는 접두사 ( ) 로 복사 됩니다 ../node-modules

npm <2.0.0

평소 somelocallib와 같이 의존성을 두십시오 package.json.

"dependencies": {
  "somelocallib": "0.0.x"
}

그런 다음 run npm link ../somelocallib및 npm은 작업중인 버전을 symlink로 설치합니다 .

app@0.0.1 /private/tmp/app
└── somelocallib@0.0.1 -> /private/tmp/somelocallib

참조 : link (1)


3
연결을 해제하는 방법
AtaurRehman Asad

13
"npm link"로 로컬 패키지를 설치하는 단점은 많은 모듈 복제가 있다는 것입니다. "module : version"또는 "module : git-repo"를 사용하여 종속성을 나열하면 npm 설치 알고리즘은 상위 패키지에 이미 설치된 패키지를 설치하지 않습니다. 따라서 "npm link"를 사용하면 기본 응용 프로그램이 "async@0.8.0"에 의존하고 모든 로컬 패키지가 "async@0.8.0"에 의존하는 경우 "async@0.8을 설치하는 모든 로컬 패키지로 끝납니다. 기본 응용 프로그램의 동일한 "비동기"버전을 사용하는 대신 0 ". "npm 설치 폴더"를 사용하면 발생하지 않습니다.
Pedro Ballesteros

3
@PedroBallesteros를 사용 npm dedup하여이 문제를 해결할 수 있습니다 . npmjs.org/doc/cli/npm-dedupe.html
danilopopeye

4
"로컬 패키지가 복사됩니다 ..."는 최신 npm 버전의 경우가 아닙니다. 이제 심볼릭 링크가 만들어졌습니다.
tsauerwein

2
@danilopopeye per docs.npmjs.com/cli/install npm install <folder> description에 따르면 현재 프로젝트에서 심볼릭 링크로 디렉토리에 패키지를 설치하십시오.
허먼 J. Radtke III

211

이제 로컬 노드 모듈 설치 경로를 package.json직접 지정할 수 있습니다. 문서에서 :

지역 경로

버전 2.0.0부터는 패키지가 포함 된 로컬 디렉토리에 대한 경로를 제공 할 수 있습니다. 지역 경로를 사용하여 저장할 수 있습니다 npm install -S또는 npm install --save, 이러한 양식 중 하나를 사용하여 :

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

이 경우 상대 경로로 정규화되어에 추가됩니다 package.json. 예를 들면 다음과 같습니다.

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

이 기능은 로컬 오프라인 개발 및 외부 서버에 충돌하지 않고 npm 설치가 필요한 테스트를 작성하는 데 유용하지만 공용 레지스트리에 패키지를 공개 할 때는 사용하지 않아야합니다.


23
NPM 3 절 +에서 정상화는 절대입니다 하지 상대 는 같은 것을 볼 수 있도록"bar": "file:///home/user/src/foo/bar"
론 Wertlen

27
버전 증분없이 로컬 경로 종속성을 업데이트하는 방법은 무엇입니까?
Bohdan Lyzanets

3
그건 그렇고, 표준 node:onbuild이미지는 현재 디렉토리 만 복사하므로 노드 응용 프로그램을 도킹하려고 할 때 및 / 또는 노드 응용 프로그램을 도킹하려고하면 모든 종류의 문제가 발생합니다 ../foo.
donmartin

4
이것을 git + ssh와 통합 할 수있는 방법이 npm install있습니까? 따라서 로컬에서 git 저장소의 로컬 사본을 갖 거나 LAN의 다른 git 저장소를 가질 수 있습니까? 위의 git + ssh에서 npm을 설치하려고하면 node_modules 디렉토리를보고 git + ssh를 거치지 않고 최상위 패키지를 설치하는 것처럼 보입니다.
Michael

1
작업 설치 그러나이 방법으로 모듈을 내 프로젝트로 가져 오려고하면 "ERR not found"가 나타납니다.
C4d

87

이것은 나를 위해 작동합니다.

package.json 파일에 다음을 배치하십시오.

"scripts": {
    "preinstall": "npm install ../my-own-module/"
}

4
"npm link"를 사용하지 않아도되는 제안에 감사드립니다
ItalyPaleAle

.gitignore모듈 폴더에서 제거 되어 생성 .npmignore되었으며 처음 실행할 때 777을 제외한 모든 폴더에 777을 재귀 적으로 적용했습니다 node_modules. 그러나 예, 의존성을 설치했습니다. npm 버전 1.4.14 사용
L0LN1NJ4 14

이것을 사용했지만 node_modules를 엉망으로 만드는 대신 app_modules를 사용했습니다
catalint

1
왜 안돼 "dependencies": { "my-own-module": "file:../my-own-module" }?
Bohdan Lyzanets

1
@Bohdan에 동의합니다. localdependencies는 똑같은 일을 할 것입니다. 사용의 이점은 종속성을 최신 상태로 유지하기 위해 매번 npm link수행 할 필요가 없다는 것 npm install입니다.
froginvasion

30

모듈을 버전 제어로 확인하고 npm 링크를 기억하는 개발자에게 의존하지 않기 때문에 이것을 더 자동화하려면 이것을 package.json "scripts"섹션에 추가하면됩니다.

"scripts": {
    "postinstall": "npm link ../somelocallib",
    "postupdate": "npm link ../somelocallib"
  }

이것은 해키를 넘어선 느낌이지만 "작동"하는 것 같습니다. 이 npm 문제에서 팁을 얻었습니다 : https://github.com/npm/npm/issues/1558#issuecomment-12444454


15
이유 postinstallpostupdate대신 preinstall하고 preupdate?
rightfold

1
이것이하는 일에 대해 좀 더 설명해 주시겠습니까? 즉, 여러 루트 폴더 (예 : "멀티 루트 작업 영역")로 vscode 프로젝트를 설정하면 소비하는 프로젝트에 대해 모듈 폴더의 변경 사항을 즉시 반영 할 수 있습니까? -이 핵에 관한 것입니까?
bvdb

26

다음은 로컬 종속성을 추가하는 방법입니다.

npm install file:src/assets/js/FILE_NAME

NPM에서 package.json에 추가하십시오.

npm install --save file:src/assets/js/FILE_NAME

package.json에 다음과 같이 직접 추가하십시오.

....
  "angular2-autosize": "1.0.1",
  "angular2-text-mask": "8.0.2", 
  "animate.css": "3.5.2",
  "LIBRARY_NAME": "file:src/assets/js/FILE_NAME"
....

6

마스터 프로젝트

마스터 프로젝트에 사용할 package.json은 다음과 같습니다.

"dependencies": {
    "express": "*",
    "somelocallib": "file:./somelocallib"
}

,이 ./somelocallib라이브러리 폴더에 대한 참조입니다 마스터 프로젝트 package.json에 상대적으로가 .

참조 : https://docs.npmjs.com/files/package.json#local-paths


하위 프로젝트

라이브러리 종속성을 처리하십시오.

달리는 것 외에도 npm install 해야합니다 (cd node_modules/somelocallib && npm install).

이것은 NPM의 알려진 버그입니다.

참조 : https://github.com/npm/npm/issues/1341 (보다 최신 참조 참조)


도커에 대한 참고 사항

마스터 package.locksomelocallib/package.lock 소스 코드 관리자에 .

그런 다음 Dockerfile에서 다음을 사용하십시오.

FROM node:10
WORKDIR /app
# ...
COPY ./package.json ./package-lock.json ./
COPY somelocallib somelocallib
RUN npm ci
RUN (cd node_modules/zkp-utils/ && npm ci)
# ...

나는 (cd A && B)구조 에서 괄호 를 사용하여 조작을 dem 등원으로 만듭니다.


3

나는 그것이 npm install ../somelocallib작동 한다는 것을 안다 .

그러나 질문에 표시되는 구문이 작동하는지 여부는 알 수 없습니다 package.json...

불행히도 doc 은 URL을 종속성으로 만 언급하는 것 같습니다.

시도 file:///.../...tar.gz압축 지역 lib 디렉토리를 가리키는 ... 그리고 작동하는지 알려주십시오.


1
"종속성": { "somemodule": "file : ///./internal_modules/somemodule"}을 package.json에 추가합니다. 작동하지 않습니다. 오류 코드는 "npm ERR! code E404"입니다.
Jeffrey

2

이것은 나를 위해 일했습니다 : 먼저 npm 디렉토리에 올바른 사용자가 있는지 확인하십시오

sudo chown -R myuser ~/.npm
sudo chown -R myuser /usr/local/lib/node_modules

그런 다음 package.json에 디렉토리를 연결하십시오.

"scripts": {
 "preinstall": "npm ln mylib ../../path/to/mylib"
}, 
"dependencies": {
  "mylib" : "*"
}

2
XP en.wikipedia.org/wiki/NTFS_symbolic_link 이후 Windows에서 기호 링크가 가능합니다 . 관리자 권한으로 명령 줄을 연 다음를 실행하십시오 npm install.
sod


2

호기심 ..... 적어도 Windows에서 (내 npm은 3.something) 내가해야 할 일 :

"dependencies": {
 "body-parser": "^1.17.1",
 "module1": "../module1",
 "module2": "../module2",

내가했을 때 npm install ../module1 --save그것은 문서에 따라 상대 경로가 아닌 절대 경로를 초래했습니다.

나는 조금 더 엉망 ../xxx으로 충분하다고 판단했다 .

특히 로컬 노드 모듈이 d : \ build \ module1, d : \ build \ module2 및 d : \ build \ nodeApp에있는 내 노드 프로젝트 (응용 프로그램)라고 체크 아웃했습니다.

'설치'하기 위해 :

d:\build\module1> rmdir "./node_modules" /q /s && npm install
d:\build\module2> rmdir "./node_modules" /q /s && npm install
d:\build\nodeApp> rmdir "./node_modules" /q /s && npm install

module1의 package.json은 "module2"의 종속성을 갖습니다. "../module2"; module2에는 로컬 종속성이 없습니다. nodeApp에는 "module1": "../module1"및 "module2": "../module2"종속성이 있습니다.

3 개의 폴더 (module1, module2 및 nodeApp)가 모두 동일한 수준에 있기 때문에 이것이 나에게만 효과가 있는지 확실하지 않습니다 ....


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