GitHub에서 직접 npm 패키지를 설치하는 방법은 무엇입니까?


870

github에서 모듈을 설치하려고하면 다음과 같은 결과가 발생합니다.

package.json에서 ENOENT 오류가 발생했습니다.

express를 사용하여 쉽게 재현 :

npm install https://github.com/visionmedia/express 오류가 발생합니다.

npm install express 공장.

왜 github에서 설치할 수 없습니까?

다음은 콘솔 출력입니다.

npm http GET https://github.com/visionmedia/express.git
npm http 200 https://github.com/visionmedia/express.git
npm ERR! not a package /home/guym/tmp/npm-32312/1373176518024-0.6586997057311237/tmp.tgz
npm ERR! Error: ENOENT, open '/home/guym/tmp/npm-32312/1373176518024-0.6586997057311237/package/package.json'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.8.0-23-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "https://github.com/visionmedia/express.git"
npm ERR! cwd /home/guym/dev_env/projects_GIT/proj/somename
npm ERR! node -v v0.10.10
npm ERR! npm -v 1.2.25
npm ERR! path /home/guym/tmp/npm-32312/1373176518024-0.6586997057311237/package/package.json
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/guym/dev_env/projects_GIT/proj/somename/npm-debug.log
npm ERR! not ok code 0

1
누구나 package.json devDependencies 형식을 제공 할 수 있습니까?
Adam

1
@Adam "express": "github:visionmedia/express""dependencies"섹션에 추가 package.json file한 후 다음을 실행할 수 있습니다. npm install(아래 언급 한대로)
Danny

@ danny, 그것은 나를 위해 작동하지 않습니다. Express Repo에 dist 폴더가 있는지 궁금합니다.
ml242

답변:


1158

https://github.com/visionmedia/expressnpm 모듈이 아닌 웹 페이지의 URL 이기 때문 입니다. 이 맛을 사용하십시오 :

git+https://git@github.com/visionmedia/express.git

또는 SSH가 필요한 경우이 맛 :

git+ssh://git@github.com/visionmedia/express.git

86
git+https://github.com/visionmedia/express.gitssh 대신 https를 사용 하는 데 사용할 수도 있습니다 .
Steve Willcock

43
설치하려는 저장소는 npm 모듈 이어야하며 package.json파일을 포함해야합니다. 그렇지 않으면이 오류가 발생 Error: ENOENT, open 'tmp.tgz-unpack/package.json'합니다.
GabLeRoux

20
내가 특정 지점을 원한다면?
kilianc

3
내가 지금 생각 만이 해결책은 함께 커밋 지정하는 것입니다 ... / express.git # 커밋
가스통 산체스

39
#쉘에서 특정 분기를 사용 하기 위해를 탈출해야 할 수도 있습니다 .npm install git+https://github.com/user/repo.git\#branch
mor

655

npm install visionmedia/expressGithub에서 설치할 수도 있습니다

또는

npm install visionmedia/express#branch

또한 Gist, Bitbucket, Gitlab 및 기타 여러 특수 형식에서 직접 설치할 수 있습니다. 그들 모두를위한 npm install 문서 를 보십시오 .


19
URL을 지정하지 않고 무엇입니까? npm은 어떤 풍미 호스팅 서비스를 사용하고 있는지 어떻게 알 수 있습니까?
Jake Rayson

22
@Jake Rayson : 버전 1.1.65 부터 가능 하며 작동 github.com합니다.
ezze

5
Windows에서 저에게 효과가 없었습니다. 현재 디렉토리의 하위 폴더에서 설치하려고했습니다.
Jarrod Mosen

7
이것은 npm 1.4.28
user3751385의

1
@ user3751385 전역 설치가 npm 3.3.8에서 작동하는 것 같습니다.
XåpplI'-I0llwlg'I-

170

자식이 설치되어 있지 않으면 시도해 볼 수 있습니다

npm install --save https://github.com/Amitesh/gulp-rev-all/tarball/master

10
좋은 답변입니다! 다른 명령 (다른 답변의)이 git fetching logic에 붙어있는 동안 그것은 나를 위해 일했습니다.
Daniel Kmak

2
대신 태그 이름을 사용할 수도 있습니다 master. 그렇게하는 것이 아마 더 안전 할 것입니다.
mpen

4
분기 작업을 할 때 유용합니다. 일반적인 형식의 답변을 포함하도록 답변을 수정해야합니다 /tarball/. 처음 에는 눈치 채지 못했습니다
Lu Roman

2
이것은 Docker 컨테이너 내에서 종속성을 설치할 때 나를 위해 유일한 대답입니다.
Fela Maslen

1
또한 전체 저장소를 다운로드하지 않아도됩니다. 감사!
som

58

2016 년 9 월 업데이트

vanilla https github URL에서 설치하면 이제 작동합니다 :

npm install https://github.com/fergiemcdowall/search-index.git

편집 1 : 소스 제어 시스템에서 읽고 있기 때문에 모든 모듈에 대해이 작업을 수행 할 수 없다고 말하는 몇 명의 사용자가 있습니다. 유효하지 않은 / 컴파일되지 않은 / 버기 코드가 포함될 수 있습니다. 명확하게하기 위해 (말하지 않고 가야하지만) 리포지토리의 코드가 npm 사용 가능 상태 인 경우 github에서 직접 행복하게 설치할 수 있습니다

편집 2 : (21-10-2019) 우리는 이제 "peak typescript / React / Babel"을 통해 살고 있으므로 JavaScript 컴파일이 꽤 일반적이되었습니다. 컴파일을 고려해야 할 경우를 살펴보십시오 prepare. 즉, NPM 모듈은 컴파일 할 필요 가 없으며, 특히 오래된 노드 모듈 (그리고 아마도 매우 새로운 최첨단 "ESNext"-y 모듈)의 경우 컴파일이 기본값이 아니라고 가정하는 것이 좋습니다.


9
repo에 dist폴더가 포함되어 있고 대부분 그렇지 않은 경우가 아니라면 GitHub 소스에서 원하는 npm 패키지를 설치할 수 없습니다. 내가 연결 한 문제는 npm 버그입니다-GitHub prebuild에서 설치할 때 단계가 실행되지 않습니다. 예를 들어 node-influx / node-influx 설치를 시도하십시오 .
Dan Dascalescu

4
dist폴더가 없는 저장소는 GitHub에서 설치할 수 있습니다 npm install https://github.com/fergiemcdowall/search-index-adder. 예를 들어 완벽하게 작동합니다.
Fergie

4
/libdist 폴더가있는 것처럼 직접 usabel 소스를 가지고 있기 때문에 그렇습니다 . 내 요지는 package.jons에 repo의 GitHub URL을 포함시키는 것이 그 repo를 설치하는 데 작동하지 않는다는 것입니다. 예를 들어 TypeScript로 작성된 모듈은 변환 된 코드를 저장소로 푸시해야합니다. 이들은 일반적으로이 작업을 수행하지 않지만 사전 게시 스크립트를 사용하여 .JS 코드를 dist 폴더에 덤프하여 npmjs.com에 업로드합니다.
Dan Dascalescu

2
나는 이것이 조금 늦다는 것을 알고 있지만, 트릭은 실제로 npm에는 Git 저장소에 일대일 매핑이 없습니다. 일부 프로젝트는 커밋하기 전에 게시하기 전에 소스 파일을 빌드합니다. 즉, Git 저장소에는 없지만 npm 패키지에 있습니다.이 작업을 수행하는 프로젝트는 Git에서 제대로 작동하지 않습니다. 이것이 실패 할 수있는 또 다른 예는 매크로 리포지토리입니다. 예를 들어 Babel의 GitHub 프로젝트에는 하위 폴더에 수백 개의 개별 npm 패키지가 포함되어 있습니다. npm은 Git에 직접 매핑되지 않으므로 개별적으로 게시 할 수 있습니다. npm은 디렉토리에있는 모든 것을 게시합니다.
John Chadwick

13
나중에 이것을 우연히 본 사람이라면 ... npm5부터 npm prepare은 git deps를 포함하여 "설치"에 대한 스크립트를 실행할 것 입니다. 이는 컴파일 및 dist 폴더에 대한 위의 주석이 오래되었음을 의미합니다. 컴파일을 올바르게 실행하도록 설정 한 패키지는 prepare컴파일 된 에셋을 git에 커밋하지 않고 git dep처럼 잘 작동합니다.
jasonkarns

54

npm install https://github.com/{USER}/{REPO}/tarball/{BRANCH}다른 지점 도 사용해야합니다.


이 문제가 발생했습니다 ... github.com/yarnpkg/yarn/issues/2738 레지스트리를 github tarball 레지스트리로 변경할 수 있었고 작동했습니다 .. 감사합니다!
Matt Goo

이로 인해 몇 가지 주요 성능 문제가 해결되었습니다. {USER} / {REPO} .git # {BRANCH} 사용이 매우 느 렸습니다.
Erik Koopmans

37

Peter Lyons의 최신 답변은 최신 NPM 버전과 관련이 없습니다. 예를 들어,이 답변에서 비판 된 것과 동일한 명령을 사용하는 것이 좋습니다.

$ npm install https://github.com/visionmedia/express

문제가 계속되면 사용중인 패키지에 문제가있을 수 있습니다.


또한 이 명령을 사용하면 자동으로 github.com/expressjs/express로 리디렉션됩니다. :)
Colin D

33

이 방법은 npm의 설치 설명서 와 여기에있는 다른 많은 답변 에서 꽤 잘 설명 되어 있습니다.

npm install git+ssh://git@github.com:<githubname>/<githubrepo.git[#<commit-ish>]
npm install git+ssh://git@github.com:<githubname>/<githubrepo.git>[#semver:^x.x]
npm install git+https://git@github.com/<githubname>/<githubrepo.git>
npm install git://github.com/<githubname>/<githubrepo.git>
npm install github:<githubname>/<githubrepo>[#<commit-ish>]

그러나 최근에 변경된 주목할만한 점은 prepare스크립트를 대체하기 위해 스크립트를 추가하는 npm prepublish입니다. 이것은 git을 통해 설치된 모듈이 prepublish스크립트를 실행 하지 않아 모듈이 npm 레지스트리에 게시 될 때 발생하는 빌드 단계를 완료하지 못한 오랜 문제를 해결합니다 . https://github.com/npm/npm/issues/3055를 참조 하십시오 .

물론 모듈 작성자는 새로운 prepare지시문 을 사용하여 작동을 시작 하려면 package.json을 업데이트해야합니다 .


19

UPDATE는 지금 당신은 할 수 있습니다 : npm install git://github.com/foo/bar.git
나에 package.json:

"dependencies": {
  "bar": "git://github.com/foo/bar.git"
}

19

구문의 일반적인 형태는

<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]

귀하의 경우에는

npm install git+ssh://git@github.com/visionmedia/express.git

npmjs 문서에서 :

npm 설치 :

호스팅 된 git 공급자로부터 패키지를 설치하고 git으로 복제합니다. 전체 자식 원격 URL의 경우 해당 URL 만 시도됩니다.

<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish>

| #semver :]는 git, git + ssh, git + http, git + https 또는 git + file 중 하나입니다.

#이 제공되면 해당 커밋을 정확하게 복제하는 데 사용됩니다. commit-ish의 형식이 #semver :이면 유효한 semver 범위 또는 정확한 버전이 될 수 있으며 npm은 레지스트리 종속성과 마찬가지로 원격 저장소에서 해당 범위와 일치하는 태그 또는 참조를 찾습니다. # 또는

semver :가 지정되면 master가 사용됩니다.

저장소가 하위 모듈을 사용하는 경우 해당 하위 모듈도 복제됩니다.

설치중인 패키지에 준비 스크립트가 포함되어 있으면 패키지가 패키지되고 설치되기 전에 해당 종속성 및 devDependencies가 설치되고 준비 스크립트가 실행됩니다.

다음 git 환경 변수는 npm에 의해 인식되며 git을 실행할 때 환경에 추가됩니다.

  • GIT_ASKPASS
  • GIT_EXEC_PATH
  • GIT_PROXY_COMMAND
  • GIT_SSH
  • GIT_SSH_COMMAND
  • GIT_SSL_CAINFO GIT_SSL_NO_VERIFY

자세한 내용은 git man 페이지를 참조하십시오.

예 :

npm install git+ssh://git@github.com:npm/npm.git#v1.0.27
npm install git+ssh://git@github.com:npm/npm#semver:^5.0
npm install git+https://isaacs@github.com/npm/npm.git
npm install git://github.com/npm/npm.git#v1.0.27
GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:npm/npm.git npm install

14

직접 설치하십시오.

npm install visionmedia/express

또한, 추가 할 수있는 "express": "github:visionmedia/express"받는 사람 "dependencies"의 섹션 package.json파일, 다음 실행 :

npm install

9

당신은 또한 할 수 있습니다

npm i alex-cory/fasthacks

또는

npm i github:alex-cory/fasthacks

원래:

npm i user_or_org/repo_name

6

다음 npm install과 같은 명령으로 github repo를 직접 설치할 수 있습니다 . npm install https://github.com/futurechallenger/npm_git_install.git --save

참고 : npm 명령으로 설치할 저장소에서 :

  1. @Dan Dascalescu의 의견에 따르면 리포지토리에 dist 폴더 가 있어야 할 수도 있습니다 .
  2. repo에 package.json 이 있어야합니다 ! 추가를 잊어 버렸습니다.

1
dist리포지토리 에는 폴더 나 빌드 코드 가 필요하지 않습니다 . 의 prepare스크립트 만 사용하면 됩니다 package.json.
Cameron Tacklind


0

나는 시도 npm install git+https://github.com/visionmedia/express했지만 너무 오래 걸렸고 그것이 효과가 있는지 확신하지 못했습니다.

나를 위해 일한 것은-이었다 yarn add git+https://github.com/visionmedia/express.


-3

이 명령을 사용해보십시오

 npm install github:[Organisation]/[Repository]#[master/BranchName] -g

이 명령은 저에게 효과적이었습니다.

 npm install github:BlessCSS/bless#3.x -g

12
NPM 설치와 함께 SUDO를 사용하지 마십시오! 오히려 chown을 사용하여 소유자를 변경하십시오.
Marek Fajkus 2016 년

버전은 태그 / 분기 이름 또는 package.json 버전입니까?
mfrachet

@MarekFajkus sudo를 사용하여 패키지 관리자를 통해 Linux에 설치하는 경우 ... 패키지를 전체적으로 설치하려면 root를 사용해야합니다.
Ray Foss

1
@RayFoss 1 년 늦었지만 ... 전 세계적으로 설치된 패키지를 모든 사용자가 사용할 수있게하려는 경우에만 해당됩니다. 에 전역 패키지를 설치하도록 npm을 구성 ~/node_modules하면 sudo가 필요하지 않습니다.
Mr5o1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.