特定のバージョンでのGitからのnpmインストール


181

非公開にしたいNode.jsのモジュールを書いたと仮定します。次の行を追加できることを知っています。

"private": "true"

package.jsonファイル、および私はまた、私ができることを知ってnpm install、このモジュールは、ファイルシステムのパスまたはGitHubのリポジトリを含むgitの、へのリンクを使用して。

また、そのようなファイルシステムパスまたはgit repoへのリンクをpackage.jsonに入れて、dependenciesパーツが次のように見えることもわかっています。

"dependencies": {
  "myprivatemodule": "git@github.com:..."
}

私が今欲しいのは、最新バージョンにリンクするのではなく、特定のバージョンにリンクすることです。私が知っている唯一の可能性は、そのIDを使用して特定のコミットにリンクすることです。しかし、これはのようなバージョン番号を使用するよりも読みにくく、保守性が悪くなり0.3.1ます。

だから私の質問です:とにかくそのようなバージョン番号を指定して、npmにgitリポジトリでこのバージョンを含む最新のコミットを検索させることは可能ですか?

そうでない場合、プロジェクトでこの問題をどのように解決しますか?コミットIDを使用していますか、またはこれに対するより良い解決策はありますか?

回答:


193

依存性は、から利用可能でなければならないregistryことで、単にインストールされるように指定するversion記述子を

あなたは確かにすることができます作成し、独自のレジストリを使用する代わりに、registry.npmjs.orgあなたのプロジェクトが公に共有されるべきではない場合。

ただし、レジストリにない場合は、URLまたはGit URLで参照する必要があります。Git URLを使用してバージョンを指定する<commit-ish>には、末尾にURLなどの適切なを含めます

次の名前のタグの例0.3.1

"dependencies": {
  "myprivatemodule": "git@github.com:...#0.3.1"
}

:上記のスニペットは、質問に投稿されたものと同じベースURLを示しています。

切り取った部分(...)は次のように入力してください:

"myprivatemodule": "git@github.com:{owner}/{project}.git#0.3.1"

また、SSHアクセスが利用できない場合は、別のアドレス形式が必要になります。

"myprivatemodule": "git://github.com/{owner}/{project}.git#0.3.1"

OSによっては、linkGithubからクローンを作成した別のフォルダーの依存関係にアクセスできる場合もあります。


1
代わりに404ページにつながるため、この投稿のリンクの一部は古くなっているようです。これは残念なことです。これは、私がずっと探していた情報の一部であるためです。
MvG 2015

5
特定のバージョンにタグを付けてgit tag -a "1.0.0"をプッシュしgit push --tags、依存関係の#v1.0.0最後にを追加しましたgit+ssh。しかし、npm update何も起こりません。
loretoparisi

3
@loretoparisiすみません。追加vが必要だと示唆するつもりはありませんでした。後は#フラグメントは、タグのフルネーム(または他の一致している必要がありますcommitshを) -お使いの場合には、#1.0.0
Jonathan Lonowski

2016年7月の時点で、独自のレジストリのホスティングはcouchdbからマイクロサービスに移行しているため、さらに複雑になっています
Yan Foto

3
あなたは今できることnpm i {owner}/{project}#{tag}や追加"{library}": "github:{owner}/{project}#{tag}"の代わりに使用するのではpackage.jsonにgit@github.comgit://github.com
マイク・W

238

受け入れられた答えは私にとってはうまくいきませんでした。githubからパッケージをプルするために私がやっていることは次のとおりです。

npm install --save "git://github.com/username/package.git#commit"

または、package.jsonに手動で追加します。

"dependencies": {
  "package": "git://github.com/username/package.git#commit"
}

41
:あなたは、HTTP / HTTPSを使用して確認している場合、あなたは「gitの+」接頭辞が含ま"package": "git+https://github.com/username/package.git#commit"
ATES Goral

4
これは「npm install」までは機能しましたが、アプリケーションを実行しようとしたときにrequire( 'mymodule')がパッケージを見つけられませんでした。パッケージは同じ名前でnode_modulesディレクトリにありますが。
デリック2016年

ああ、問題のモジュールには、私が欲しかった特定のコミットのビルドが含まれていなかったので、同じ問題がある場合は手動でビルドする必要があるかもしれません。
デリック2016年

1
#tag通常はバージョン番号を指すものを使用することもできます
deltree

1
@surjikal gitでバージョン番号を使用するには、リリースにタグを付ける必要があります。たとえばgit tag -a v1.0.1 && git push --tag && git push、@ Jonathan Lonowskiもコメントで述べています。
dotnetCarpenter 2016年

80

バージョンごとにタグまたはリリースを意味する場合、githubはそれらのダウンロードリンクを提供します。たとえば、フェッチバージョン0.3.2 をインストールする場合(npmでは使用できません)、package.json下に追加しますdependencies

"fetch": "https://github.com/github/fetch/archive/v0.3.2.tar.gz",

コミットハッシュアプ​​ローチと比較した場合の唯一の欠点は、ハッシュが変更されたコードを表さないことが保証されているのに対して、タグは置き換えられる可能性があることです。ありがたいことに、これはめったに起こりません。

更新:

最近私が使用するアプローチは、GitHubが提供する依存関係のコンパクトな表記法です。

"dependencies": {
  "package": "github:username/package#commit"
}

コミットは、タグのように、何でもコミットできます。GitHubの場合、イニシャルgithub:がデフォルトであるため、ドロップすることもできます。


アーカイブモードはコミットにも使用できます。例: `yarn addgithub.com/github/fetch/archive/… `
bvj

最もクリーンなソリューション。
チャーリーボドキン

8

上記の @qubyteへの私のコメント例は切り刻まれているので、これは読みやすいものです...

上記の @surjikalの方法はブランチコミットでは機能しますが、インクルードしようとしたツリーコミットでは機能しませんでした。


アーカイブモードはコミットにも機能します。たとえば、@ a2fbf83をフェッチします。

npm

npm install  https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz

yarn add  https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz

形式

 https://github.com/<owner>/<repo>/archive/<commit-id>.tar.gz


ここだ木が必要なコミット/archive/モード:

yarn add  https://github.com/vuejs/vuex/archive/c3626f779b8ea902789dd1c4417cb7d7ef09b557.tar.gz

関連するvuexコミット


8

このコマンドはusername/package、特定のgit commitからnpmパッケージをインストールします。

npm install https://github.com/username/package#3d0a21cc

これ3d0a21ccがコミットハッシュの最初の8文字です。


3

ここでは、実行時に直面した問題について説明します。npm installパッケージはに表示されませんnode_modules

問題は、インストールされたパッケージのnamepackage.jsonがインポートされたパッケージ(package.jsonプロジェクトのキー入力)の名前と異なることでした。

したがって、インストールされているプロジェクト名がsome-package(そのの名前の値package.json)の場合、package.jsonプロジェクトに次のように書き込みます"some-package": "owner/some-repo#tag"


私はあなたの答えをもっと早く見つけたいと思っています😓-私は解決しました、同じ問題がしばらくの間私を苦労させています。そして、このname要件はネットではあまり言及されていません。
カマフェザー

「完全なスコープパッケージ名を指定して、package.jsonにパッケージの依存関係を追加します。」-実際にそれを強調していない:help.github.com/en/articles/...
Kamafeather

npm install --save git+https://<remote-github-repo-url>これが今後この問題に遭遇しないようにするためのかなり安全な方法であることがわかりました。
カマフェザー

2

2つのバージョンのtfjs-coreを実行する必要があり、インストール後に両方をビルドする必要があることがわかりました。

package.json:

"dependencies": {
  "tfjs-core-0.14.3": "git://github.com/tensorflow/tfjs-core#bb0a830b3bda1461327f083ceb3f889117209db2",
  "tfjs-core-1.1.0": "git://github.com/tensorflow/tfjs-core#220660ed8b9a252f9d0847a4f4e3c76ba5188669"
}

次に:

cd node_modules/tfjs-core-0.14.3 && yarn install && yarn build-npm && cd ../../
cd node_modules/tfjs-core-1.1.0  && yarn install && yarn build-npm && cd ../../

そして最後に、ライブラリを使用するには:

import * as tf0143 from '../node_modules/tfjs-core-0.14.3/dist/tf-core.min.js';
import * as tf110 from '../node_modules/tfjs-core-1.1.0/dist/tf-core.min.js';

これはうまくいきましたが、間違いなく#hoodratです


1
ありがとう、私は他の考えられる方法でそれをインポートしようとしています。ファイルから直接インポートする必要があることを理解するために、スニペットを確認する必要がありました。
Victor Ivens

1

これを複数のモジュールで実行していて、バージョンをより細かく制御したい場合は、独自のプライベートnpmレジストリを用意する必要があります。

このようにして、モジュールをプライベートnpmレジストリにnpmパブリッシュし、パブリックモジュールの場合と同じようにpackage.jsonエントリを使用できます。

https://docs.npmjs.com/files/package.json#dependencies


すべてのリンクは404です
Cyrille Pontvieux 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.