GitHubからnpmパッケージを直接インストールする方法は?


870

githubからモジュールをインストールしようとすると、次のような結果になります。

package.jsonのENOENTエラー。

エクスプレスを使用して簡単に再現:

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、それは私にはうまくいきません。それを有効にするためのそのエクスプレスリポジトリにdistフォルダーがあったのかと思います。
ml242 2018年

回答:


1158

これhttps://github.com/visionmedia/expressは、npmモジュールではなく、Webページの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を使用することもできます。
スティーブウィルコック2013

43
インストールするリポジトリはnpmモジュールでなければならず、package.jsonファイルが含まれている必要があります。そうしないと、次のエラーが発生しますError: ENOENT, open 'tmp.tgz-unpack/package.json'
GabLeRoux 2014

20
特定のブランチが必要な場合はどうすればよいですか
kilianc 2014年

3
今のところ私が考える唯一の解決策は、... / express.git#commitでコミットを指定することです
Gaston Sanchez

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 14

22
@Jake Rayson:バージョン1.1.65以降で可能であり、機能しgithub.comます。
ezze 2014

5
Windowsでは動作しませんでした。現在のディレクトリのサブフォルダからインストールしようとしただけです。
Jarrod Mosen 2014

7
これはNPM 1.4.28のよう(すなわちNPM Iレポ/ PKG -g)グローバルインストールの作業をしていません
user3751385

1
@ user3751385グローバルインストールがnpm 3.3.8で機能しているようです。
- XåpplI'-I0llwlg'I

170

gitがインストールされていない場合は、

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

10
正解です。他のコマンド(他の回答から)がgit fetchingロジックでスタックしている間、私にとってはうまくいきました。
Daniel Kmak

2
の代わりにタグ名を使用することもできmasterます。おそらくその方法でそれを行う方が安全です。
mpen 2016年

4
ブランチで作業しているときは、一般的な形式の回答を含めるように回答を変更する必要があります。/tarball/最初は気付かなかった
Lu Roman

2
これは、Dockerコンテナー内から依存関係をインストールするときに機能した唯一の答えです。
Fela Maslen

1
これは、リポジトリ全体をダウンロードする必要がない場合にも最適です。ありがとう!
som

59

2016年9月更新

vanilla https github URLからのインストールが機能するようになりました:

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

編集1:無効/未コンパイル/バグのあるコードが含まれている可能性のあるソース管理システムから読み取っているので、すべてのモジュールに対してこれを行うことはできないとコメントしているユーザーがいます。明確にする必要があります(言うまでもありませんが):リポジトリ内のコードがnpmで使用可能な状態であることを考えるとであることを考えると、githubから直接直接インストールできます。

編集2:(21-10-2019)私たちは今「Typescript / React / Babelのピーク」を生きているので、JavaScriptのコンパイルはかなり一般的になりました。コンパイルを考慮する必要がある場合は、を調べてくださいprepare。そうは言っても、NPMモジュールはコンパイルする必要はなく、特に古いノードモジュール(および場合によっては非常に新しい、最先端の「ESNext」-yモジュール)の場合は、コンパイルがデフォルトではないと想定するのが賢明です。


9
リポジトリにdistフォルダーが含まれていない限り、GitHubソースから必要なnpmパッケージをインストールすることはできません。私がリンクした問題はnpmバグです-GitHub prebuildからインストールする場合、ステップは実行されません。例として、node-influx / node-influxをインストールしてみてください。
Dan Dascalescu

4
distフォルダのないリポジトリは、たとえばGitHubからインストールできますnpm install https://github.com/fergiemcdowall/search-index-adder。完全に機能します。
ファーギー

4
そうです、直接usabelソースを持っているからです/lib(distフォルダーがあるかのように)。私の要点は、package.jonsにリポジトリのGitHub URLを含めるだけでは、そのリポジトリをインストールするために機能するとは限らないということです。たとえば、TypeScriptで作成されたモジュールは、変換されたコードをリポジトリにプッシュする必要があります。通常、これは行われませんが、事前公開スクリプトを使用して.JSコードをdistフォルダーにダンプし、npmjs.comにアップロードします。
Dan Dascalescu

2
私はこれが少し遅れていることを知っていますが、トリックは実際にはnpmがGitリポジトリへの1対1のマッピングを持っていないことです。一部のプロジェクトは、コミットする前ではなく、公開する前にソースファイルをビルドします。つまり、それらはGitリポジトリにはありませんが、npmパッケージに含まれます-これを行うプロジェクトはGitから正しく機能しません。これが失敗する別の例は、マクロリポジトリです。たとえば、BabelのGitHubプロジェクトには、サブフォルダに数百の個別のnpmパッケージが含まれています。npmはGitに直接マッピングされないため、個別に公開できます。npmは、ディレクトリにあるものは何でも公開します。
John Chadwick 2017年

14
後でこれに遭遇した人のために... npm5の時点で、npm prepareはgit depsを含む裸の「インストール」用のスクリプトを実行します。つまり、コンパイルおよびdistフォルダーに関する上記のコメントが古くなっています。コンパイルを実行するように適切に設定するパッケージprepareされたアセットをgitにコミットしなくてもgit depとして。
jasonkarns 2017年

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 2017年

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>]

ただし、最近変更された注目すべき点は、npmがprepareスクリプトを置き換えるスクリプトを追加することprepublishです。 これにより、gitを介してインストールされたモジュールがprepublishスクリプトを実行せず、モジュールがnpmレジストリに公開されたときに発生するビルドステップを完了しないという長年の問題が修正されます。https://github.com/npm/npm/issues/3055を参照してください

もちろん、モジュールの作成者は、新しいprepareディレクティブを使用して動作するように、package.jsonを更新する必要があります。


19

更新できるようになりました: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 docsから:

npm install:

ホストされているgitプロバイダーからパッケージをインストールし、それを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:が指定されている場合、マスターが使用されます。

リポジトリがサブモジュールを使用する場合、それらのサブモジュールも複製されます。

インストールされるパッケージに準備スクリプトが含まれている場合、その依存関係と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


6

npm install次のように、コマンドでgithub repoを直接インストールできます。 npm install https://github.com/futurechallenger/npm_git_install.git --save

注: npmコマンドによってインストールされるリポジトリ内:

  1. 多分あなたはdistを持っている必要があります @Dan Dascalescuさんのコメントによると、レポあなたの中にフォルダを。
  2. あなたは間違いなくあなたのリポジトリに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 16

バージョンはタグ/ブランチ名または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.