내 레지스트리없이 개인 NPM 모듈을 설치하는 방법은 무엇입니까?


329

공유 코드를 가져 와서 중앙 레지스트리에 업로드하고 싶지 않은 NPM 모듈에 넣었습니다. 문제는 다른 프로젝트에서 어떻게 설치합니까?

명백한 방법은 아마도 내 NPM 레지스트리를 설정하는 것이지만 문서에 따르면 많은 번거 로움이 포함됩니다.

로컬 파일 시스템에 있거나 심지어 git에서 NPM 모듈을 설치할 수 있습니까?

npm install --from-git git@server:project

답변:


262
cd somedir
npm install .

또는

npm install path/to/somedir

somedirpackage.json내부 를 포함해야합니다 .

git에 대해서도 알고 있습니다.

npm install git://github.com/visionmedia/express.git

4
path / to / somedir 솔루션은 작동하지만 모든 require 문은 상대 또는 절대 경로를 포함해야하기 때문에 끔찍합니다. 내가 뭔가 잘못하고 있다면 나를 바로 잡으십시오 ...
Luke Bayes

3
@Luke 네, 당신이 틀 렸습니다. npm install모든 파일이 프로젝트 디렉토리에 복사 된 후 따라서 require명령문 의 경로는 프로젝트 디렉토리에만 상대적입니다.
mihai

4
나는 상단 부분에 혼란스러워서 내가 이것을 직접 테스트하지 않은 유일한 이유는 여전히 학습 중이며 작업 할 개인 모듈이 없기 때문입니다. 어쨌든, 디렉토리를 모듈이있는 곳으로 변경 한 다음 호출 install하면 사용하려는 프로젝트가 아닌 단순히 설치하지 않습니까?
Adam Beck

11
참고 사항 : (a) git repos를 사용할 #<ref>때 git url의 끝에 a 를 추가하여 분기 / 커밋 / 태그를 지정할 수 있습니다 ( 예 : git://github.com/visionmedia/express.git#v0.0.1; (b) 안전하게 보관하려면 "private": true개인 저장소의 package.json에 추가 하십시오. 이렇게하면 npm이 비밀 소스를 공식 npm 레지스트리에 실수로 게시하지 못하게합니다. ( debuggable.com/posts/… 에 따름 )
Rafael Xavier

9
당신은 HTTP를 통해 당신의 자식을 제공하는 경우 참고는해야합니다 npm i git+http://all/the/things.git비록 git clone http://all/the/things.git작품 잘
SLF

527

당신에 개인 NPM 모듈 추가

"private": true 

당신의 package.json에

그런 다음 다른 모듈에서 개인 모듈을 참조하려면 패키지에서 이것을 사용하십시오.

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://git@github.com:myaccount/myprivate.git#v1.0.0",
    }
}

59
이것은이다 진짜 당신이 당신의 package.json 당신이 일을해야하는 것이 좋은 것 (TM)는 민간 REPO 종속성 목록을 유지하려면 정답.

6
이 예에서는 특정 태그를 참조하지만 태그가 없으면 마스터로 기본 설정됩니다. ( git-scm.com/book/en/Git-Basics-Tagging 참조 )
250R

4
자격 증명을 보완하지 않으면이 명령 줄이 개인 github 저장소에서 코드를 다운로드하는 방법을 이해하지 못합니다! 그렇다면 어떻게 github 자격 증명을 전달할 수 있습니까?
Renato Gama

28
"private": true부분은 필요하지 않지만 개인 저장소가 실수로 공개 npm 레지스트리에 게시되는 것을 방지하는 데 도움이됩니다.
evanrmurphy

2
npm은 여러 환경 변수도 찾습니다. 에서 수동 에서 npm install <git remote url>섹션과 같은 옵션이 있습니다 GIT_ASKPASSGIT_SSH기본 id_rsa_gsg_keypair를보다 다른 키를 선택하는 하나 구해 예를 들어, 사용은 :GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:npm/npm.git
재스민 헤 그만

62

로컬 파일 시스템에 있거나 심지어 git에서 NPM 패키지를 설치할 수 있습니까?

그래 넌 할수있어! 문서에서 https://docs.npmjs.com/cli/install

패키지는 다음과 같습니다

  • a) package.json 파일에 의해 기술 된 프로그램을 포함하는 폴더
  • b) (a)
  • c) (b)로 해석되는 URL
  • d) <name>@<version>(c)와 함께 레지스트리에 게시 된 a
  • e) <name>@<tag>(d)를 가리키는 a
  • f) <name> "최신"태그를 만족하는 a (e)
  • g) <git remote url>(b)로 해석되는 a

npm 훌륭하지 않습니까?


2
옵션 b)로 가면 실제로 압축 된 tarball 이어야 하며 단순한 zip 아카이브는 그렇게하지 않습니다. 즉, 폴더에 적절한 파일 이 tar -czf my-package.tar.gz dist있다고 가정하면 패키지를 만들면 다른 프로젝트에서 할 수 있습니다 . distpackage.jsonnpm install ../my-lib/my-package.tar.gz
Dániel Kis-Nagy

48

2016 년 1 월 업데이트

다른 답변 외에도 팀 컨텍스트에서 개인 모듈을 사용하려는 시나리오가 있습니다.

GithubBitbucket 은 모두 팀 API 키 생성 개념을 지원합니다 . 이 API 키는 이 팀으로 API 요청을 수행하기 위한 비밀번호 로 사용될 수 있습니다 .

당신에 개인 NPM 모듈 추가

"private": true 

당신의 package.json에

그런 다음 다른 모듈에서 개인 모듈을 참조하려면 패키지에서 이것을 사용하십시오.

    {
        "name": "myapp",
        "dependencies": {
            "private-repo":
"git+https://myteamname:aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myprivate.git",
        }
    }

여기서 팀 이름 = myteamname 이고 API 키 = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

여기에서는 비트 버킷 저장소를 참조하지만 github을 사용하는 것도 거의 동일합니다.

마지막으로, 대안으로, 한 달에 $ 7를 지불하는 것을 정말로 신경 쓰지 않는다면 (지금 서면으로) 개인 NPM 모듈 을 즉시 사용할 수 있습니다.


글로벌 모듈을 원한다면 이것을 사용할 수 있습니까?
PI.

이것은 나를 위해 작동하지 않습니다. 원격 및 저장소를 모두 찾을 수 없습니다. 어떤 아이디어?
Thomas Bormans

@ThomasBormans-여전히 문제가 있습니까? 위의 지침에 따라 package.json의 종속성 섹션에 줄로 가지고있는 것을 붙여 넣습니다 (팀 이름 / API 키). 나는 이것이 github과 bitbucket private repos 모두에 잘 작동한다는 것을 알았습니다. 어느 것을 사용하고 있습니까?
arcseldon

@arcseldon "이름": "git + 키 : x-oauth-basic@bitbucket.org/user/repo.git "디렉토리에서 EISDIR : 잘못된 작업을 반환합니다 . 그리고 "name": "git + user : key@bitbucket.org/repo.git " 는 다음 단어 remote : Not Found, fatal : repository, Command failed : git clone을 포함하여 몇 가지 오류를 반환합니다 . 어떤 아이디어?
Thomas Bormans

"git + https : // <myteamname> : <my_key> @ bitbucket.org / <my_repo_name> .git에서 답변으로 제공 한"정확한 "형식을 따르십시오. API 키는 어떻게 생성 했습니까?
비트 버킷

30

FWIW : 개인 조직 저장소를 처리 할 때 이러한 모든 답변에 문제가있었습니다.

다음은 나를 위해 일했습니다.

npm install -S "git+https://username@github.com/orgname/repositoryname.git"

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

npm install -S "git+https://blesh@github.com/netflix/private-repository.git"

이 사례에서 다른 답변이 왜 효과가 없는지 잘 모르겠습니다. 왜냐하면 Google에 도달 하고이 답변을 찾기 전에 먼저 시도한 것이기 때문 입니다. 그리고 다른 답변은 내가 과거에 한 일입니다.

잘하면 이것은 다른 누군가를 돕습니다.


2
자식 저장소의 하위 폴더를 사용할 수 있습니까?
Chris

2019 년 저를 위해 일했습니다! 그러나 자식 계정에 해당 계정에 액세스 할 수있는 자격 증명 이 있는지 확인해야했습니다 . (예를 들어 git clone을 두 번 테스트 https://하고 두 번째 실행에서 암호가 필요하지 않은지 확인하십시오. 그러면 좋습니다.)
joeytwiddle

9

나는이 같은 문제가 있었고 주변을 둘러 본 후 Reggie ( https://github.com/mbrevoort/node-reggie )를 발견했습니다 . 꽤 견고 해 보입니다. NPM 모듈을 개인 서버에 경량으로 게시 할 수 있습니다. 완벽하지는 않지만 (설치시 인증이 없음) 여전히 젊지 만 로컬에서 테스트했으며 수행해야 할 작업을 수행하는 것 같습니다.

그건 ... (그리고 이것들은 그들의 문서에서 나온 것입니다)

npm install -g reggie
reggie-server -d ~/.reggie

그런 다음 모듈 디렉토리로 cd하고 ...

reggie -u http://<host:port> publish 
reggie -u http://127.0.0.1:8080 publish 

마지막으로 URL을 직접 npm install 명령이나 package.json에서 사용하여 reggie에서 패키지를 설치할 수 있습니다.

npm install http://<host:port>/package/<name>/<version>
npm install http://<host:port>/package/foo/1.0.0

또는..

dependencies: {
    "foo": "http://<host:port>/package/foo/1.0.0"
}

7

아래와 같이 접근하기 쉬운 방식으로 코드를 구성하십시오. 이것이 가능하다면.

  • NodeProjs \ Apps \ MainApp \ package.json

  • NodeProjs \ Modules \ DataModule \ package.json

MainApp 내에서 @ NodProjs \ Apps \ MainApp \

npm install --S ../../Modules/DataModule

package.json을 다음과 같이 업데이트해야 할 수도 있습니다.

 "dependencies": {
       "datamodule": "../../Modules/DataModule"
}

이것은 내 상황에서 효과적이었습니다.


5

Npm은 이제 사용자 당 월 $ 7에 무제한 개인 호스팅 모듈 을 제공합니다.

cd private-project
npm login

패키지 json 세트에 "name": " @username/private-project"

npm publish

그런 다음 프로젝트가 필요합니다.

cd ../new-project
npm install --save @username/private-project

1
클라이언트 측 로그인 단계가 필요합니까?
Aidan Hoolachan

이것에 대한 대안은 무엇입니까? 예를 들어, S3에서 "패키지"를 호스팅하고 거기서 끌어 오려면.
Con Antonakos

4

arcseldon의 답변으로 시작 하여 팀 이름이 URL에 다음과 같이 필요하다는 것을 알았습니다.

npm install --save "git+https://myteamname@aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myteamname/myprivate.git"

API 키는 개별 사용자가 아닌 팀만 사용할 수 있습니다.


2

머신이 방화벽 아래에 있더라도 퍼블릭 Github 리포지토리에서 설치하도록 구성 :

dependencies: {
   "foo": "https://github.com/package/foo/tarball/master"
}

2

개인 github 저장소와 함께 다음을 사용합니다.

npm install github:mygithubuser/myproject

2

이것은 내가 찾던 것입니다 .

# Get the latest from GitHub, public repo:
$ npm install username/my-new-project --save-dev
# Bitbucket, private repo:
$ npm install git+https://token:x-oauth-basic@github.com/username/my-new-project.git#master
$ npm install git+ssh://git@github.com/username/my-new-project.git#master

#  or from Bitbucket, public repo:
$ npm install git+ssh://git@bitbucket.org/username/my-new-project.git#master --save-dev
# Bitbucket, private repo:
$ npm install git+https://username:password@bitbucket.org/username/my-new-project.git#master
$ npm install git+ssh://git@bitbucket.org/username/my-new-project.git#master
# Or, if you published as npm package:
$ npm install my-new-project --save-dev

2

Node.js에 내장 된 경량 프라이빗 npm 프록시 레지스트리 인 Verdaccio 를이 목적으로 사용할 수 있습니다 . 또한 무료이며 오픈 소스입니다. Verdaccio를 사용하면 일반 개인 npm 레지스트리처럼 많은 번거 로움이 없습니다.

웹 사이트에서 설치 및 실행 방법에 대한 자세한 정보를 찾을 수 있지만 다음 단계가 있습니다.

필요합니다 node >=8.x.

    // Install it from npm globally
    npm install -g verdaccio

    // Simply run with the default configuration that will host the registry which you can reach at http://localhost:4873/
    verdaccio

    // Set the registry for your project and every package will be downloaded from your private registry
    npm set registry http://localhost:4873/

    // OR use the registry upon individual package install
    npm install --registry http://localhost:4873

또한도 커가 있으므로 공개적으로 사용 가능한 도커에 쉽게 게시 할 수 있으며 구성하는 방식으로 다른 사람에게 배포 할 수있는 개인 npm 저장소가 있습니다!


0

매우 간단합니다-

npm config set registry https://path-to-your-registry/

실제로이 registry = "https://path-to-your-registry"줄을/Users/<ur-machine-user-name>/.npmrc

명시 적으로 설정했거나 기본적으로 설정된 모든 값은- npm config list

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