npm을 사용하여 로컬 모듈을 설치 하시겠습니까?


418

다운로드 한 모듈 저장소가 있는데 다른 디렉토리가 아닌 로컬로 설치하려고합니까?

이 작업을 수행하는 쉬운 방법은 무엇입니까?

답변:


479

로부터 NPM-링크 문서 :

로컬 모듈 디렉토리에서 :

$ cd ./package-dir
$ npm link

프로젝트 디렉토리에서 모듈을 사용하십시오.

$ cd ./project-dir
$ npm link package-name

또는 한 번에 상대 경로를 사용하십시오.

$ cd ./project-dir
$ npm link ../package-dir

이것은 후드에서 위의 두 명령을 사용하는 것과 같습니다.


14
이것이 내가 지금까지 본 유일한 깔끔한 접근법입니다-왜 npm이 모호하고 불분명해야합니까? 로컬 패키지 생성, 설치 및 사용과 관련하여 링크는 잘 모르겠지만 링크는 훌륭하지만 용어는 다소 혼란 스럽습니다.
smaudet

6
@Rich Apodaca, 문서 링크 주셔서 감사합니다. 프로세스 취소를 언급하지 않습니다. 심볼릭 링크를 만드는 것만으로 정상적인 것처럼 제거 할 수 있습니까?
Tyler Collier

1
@TylerCollier NPM 링크 해제 미러 이미지 작업 것으로 보인다 stackoverflow.com/a/24940024/54426
리치 아포 다카

1
참고로 Angular2 (또는 다른 응용 프로그램?)를 사용하는 경우 특정 종류의 문제의 근본 원인이되는 npm 연결과 관련하여 약간의 소문이 있습니다. 여기여기에
The Red Pea

4
그러나 npm link외부 종속성의 두 번째 인스턴스가 작성됩니다. 따라서 패키지 A에 B와 C가 필요한 경우 B가 C가 필요합니다. B를 연결하면 응용 프로그램 A에 두 개의 C 인스턴스가있게됩니다.
user2167582

421

<folder>인수 하나만 제공하면 npm install인수는 패키지 이름 대신 로컬 폴더를 가리켜 야합니다.

npm install /path

5
링크와 달리 .npmignore를 사용합니다.
Camille Wintz

30
@bithavoc 적어도 npm 5부터 폴더를 설치 하면 복사본이 아닌 심볼릭 링크가 만들어집니다 . 참조 docs.npmjs.com/cli/install
프랭크 탄에게

3
이 방법을 사용하려고 시도했지만 모듈에서 peerDependencies를 찾을 수 없습니다.
Witalo Benicio 2016 년

1
그것은에 좋다 rm -rf node_modules전에 npm install당신이 대답의 스크립트를 실행 한 후.
Renato Back

3
@FrankTan 예,하지만 오래된 행동을 얻는 방법? 나는 사본을 원한다 !
Michael

150

같은 사람이 묻고 대답했기 때문에 npm 링크를 추가하겠습니다. 대안으로 를 .

문서에서 :

이것은 자신의 물건을 설치하는 데 편리하므로 지속적으로 다시 빌드하지 않고도 작업하고 반복적으로 테스트 할 수 있습니다.

cd ~/projects/node-bloggy  # go into the dir of your main project
npm link ../node-redis     # link the dir of your dependency

[편집] NPM 2.0부터 package.json에서 로컬 종속성을 선언 할 수 있습니다.

"dependencies": {
    "bar": "file:../foo/bar"
  }

11
그것은 원래의 의도가 아닐 수도 있지만 구글을 통해 이것을 찾는 대부분의 사람들이 원하는 것일 것입니다.
Dusty J

1
이 답변은 불완전한 것처럼 보입니다 npm link. 폴더에 대해 한 번 실행 하고 (글로벌 심볼릭 링크를 만들려면) npm link package-name프로젝트 폴더 내에서 실행 해야합니다 (프로젝트에서 글로벌 심볼릭 링크를 사용하려면). 아래 답변이 정답입니다.
Thomas Potaire 2009 년

8
@ThomasPotaire 두 대답 모두 정확합니다. npm 링크 문서를 보면,이 상대 디렉토리 접근 방식과 함께 두 가지 방법을 모두 제시합니다.
MJ

1
두 번째 방법 ( file:접근법 사용)은 내 앱과 로컬 모듈이 종속성을 공유하도록 허용했습니다. 내 테스트 npm link에서 종속성이 중복되어 종속성을 싱글 톤으로 사용해야하는 경우 문제가 발생합니다.
Daniel Waltrip

로컬 패키지 (예 : package1)가 있었고 package2는 package1의 상대 경로로 언급 된 종속성이 있습니다. npm 상대 경로가 "file : ../../ package1"으로 시작할 때 패키지를 설치하지 않고 ''../../package1 "일 때 시작 부분에 파일을 추가해도 다른 의미가 있습니까?
Dip686

16

npm pack + package.json

이것이 나를 위해 일한 것입니다.

1 단계 :에서 다음 module project을 실행하십시오 npm pack.

<package-name>-<version>.tar.gz파일 이 생성 됩니다.

2 단계 : 파일을 consumer project

이상적으로는 모든 파일을 루트 의 tmp폴더에 넣을 수 있습니다 consumer-project.

3 단계 : 참조하십시오 package.json:

"dependencies": {
  "my-package": "file:/./tmp/my-package-1.3.3.tar.gz"
}

4 단계 : Install패키지 :

npm install또는 npm i또는yarn

패키지는 consumer-project's node_modules폴더 에 있어야 합니다.

행운을 빕니다...


9

로컬 모듈에 프로젝트 범위에만 설치하려는 피어 종속성이있는 경우 이러한 접근 방식 ( npm link또는 package.json파일 종속성)이 작동 하지 않습니다 .

예를 들면 다음과 같습니다.

/local/mymodule/package.json:
  "name": "mymodule",
  "peerDependencies":
  {
    "foo": "^2.5"
  }

/dev/myproject/package.json:
  "dependencies":
  {
    "mymodule": "file:/local/mymodule",
    "foo": "^2.5"
  }

이 시나리오에서는 NPM 세트 업 myprojectnode_modules/다음과 같이 :

/dev/myproject/node_modules/
  foo/
  mymodule -> /local/mymodule

노드가로드 mymodule되고 수행 될 때 노드 require('foo')mymodule심볼릭 링크를 확인한 다음 찾을 수없는 /local/mymodule/node_modules/(및 해당 상위 항목) 만 찾습니다 foo. 대신 노드를 살펴보고 /local/myproject/node_modules/싶습니다. 프로젝트가 실행되는 위치 foo와 설치되어 있기 때문입니다 .

그래서,에 우리는 두 노드를 알 수있는 방법이 필요 없는 이 심볼릭 링크를 해결할를 찾을 때 foo, 또는 우리가 설치하는 NPM을 알 수있는 방법이 필요 복사본mymodule파일 종속성 구문에서 사용되는 경우를 package.json. 불행히도, 할 수있는 방법을 찾지 못했습니다 :(


설치 위치 NODE_PATH를 가리 키도록 설정하는 해결 방법을 찾았습니다 . 따라서 위 경우에,이 것 : 즉, 수 있습니다 찾을 . node_modules/fooNODE_PATH=/dev/myproject/node_modules/mymodulefoo
Paul Medynski

해결책이 있습니다. 종속성 모듈을 프로젝트 루트 폴더 에 넣습니다 . 일반적인 'file :' 접두사를 사용하여 package.json에 종속성을 정의하십시오 . Do npm i 프로젝트의 node_modules에서 심볼릭 링크를 생성 할뿐만 아니라 다른 유형의 종속성과 마찬가지로 의존성을 최상위 node_modules로 끌어 올릴 수 있습니다. 내 npm 버전은 v6.14.4입니다. 이 문제를 해결하는 방법에 대해 몇 시간을 보낸 후 여기에서이 솔루션을 찾았습니다 ( atmos.washington.edu/~nbren12/reports/journal/… ). 감사합니다 nbren12.
sasebot

나는 같은 문제를 겪고 있었다. 이 답변을 찾았습니다 : stackoverflow.com/questions/50807329/… , 이것은 피어 종속성 및 로컬 라이브러리의 문제를 해결합니다.
theawless

0

주요 재산이 없습니까?

이전 사람들이 대답했듯이 npm --save ../location-of-your-packages-root-directory. 는 ../location-of-your-packages-root-directory그러나 그것이 작동하기 위해서는 두 가지가 있어야합니다.

1) package.json해당 디렉토리에서

2) main이 재산 package.json설정해야 작업 IG "main": "src/index.js",경우에 대한 항목 파일 ../location-of-your-packages-root-directoryIS../location-of-your-packages-root-directory/src/index.js

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