package.jsonでgit URLを使用してブランチまたはタグに依存していますか?


399

たとえば、バグ修正でノードモジュールを分岐し、バグ修正がマージされてリリースされるまで、機能ブランチで修正済みバージョンを使用したいとします。

どのように私は私の中で固定したバージョンを参照しますdependencies私のpackage.json

回答:


569

npm docsから:

git://github.com/<user>/<project>.git#<branch>

git://github.com/<user>/<project>.git#feature\/<branch>

NPMバージョン1.1.65以降では、次のことが可能です。

<user>/<project>#<branch>

130
npm 1.1.65以降、Github URLをより簡潔にすることができますuser/projectnpmjs.org/doc/files/package.json.html次のようにブランチを添付できますuser/project#branch
dantheta 2014年

2
git://github.com/<user>/<project>.git#feature/blah動作しましたが動作<user>/<project>.git#feature/blahしませんでした...おそらく、それらの正規表現feature/blahを考慮に入れるには、より高度なものにする必要があります。これはnpmでしたv1.4.28
pulkitsinghal

5
バージョン番号をどのように含めますか?
Richard

1
@hurrymapleladプルリクエストに対しても同じことができますか?もしそうなら、コマンドはどうですか?
ラウンドロビン2018

3
NPMのドキュメントリンクdocs.npmjs.com/files/package.json#github-urlsを更新
kellen

136

@danthetaのコメントごと:

npm 1.1.65以降では、Github URLをより簡潔なユーザー/プロジェクトにすることができます。npmjs.org/doc/files/package.json.html user / project#branchのようにブランチをアタッチできます

そう

"babel-eslint": "babel/babel-eslint",

またはjscsのタグv1.12.0の場合:

"jscs": "jscs-dev/node-jscs#v1.12.0",

npm --saveを使用すると、gitが長くなることに注意してください。

https://docs.npmjs.com/files/package.json#git-urls-as-dependenciesから

依存関係としてのGit URL

GitのURLの形式は次のとおりです。

git://github.com/user/project.git#commit-ish git + ssh:// user @ hostname:project.git#commit-ish git + ssh://user@hostname/project.git#commit- ish git + http://user@hostname/project/blah.git#commit-ish git + https://user@hostname/project/blah.git#commit-ish

commit-ishは、git checkoutの引数として指定できる任意のタグ、sha、またはブランチです。デフォルトはマスターです。

GitHub URL

バージョン1.1.65以降では、GitHubのURLを "foo": "user / foo-project"として参照できます。git URLと同様に、コミットっぽいサフィックスを含めることができます。例えば:

{"name": "foo"、
"version": "0.0.0"、
"dependencies":{"express": "visionmedia / express"、 "mocha": "visionmedia / mocha#4727d357ea"}}


2
コミットに依存するsha1は、特に自分の管理下にないレポに依存している場合は、推奨されるオプションです。Gitブランチとタグは不変ではありませんが(悪意により/誤って削除/変更できます)、sha1衝突を作成することは(ほぼ)不可能です。
jakub.g 2016年

1
ブランチとコミットっぽいコミットはできますか?
munchschair 2017

45

使用develまたはfeature分岐する場合、または特定のパッケージをNPMレジストリに公開していない場合、またはそれがプライベートモジュールであるために公開できない場合git://は、でバージョン番号の代わりにURIをポイントできますpackage.json

"dependencies": {
   "public": "git://github.com/user/repo.git#ref",
   "private": "git+ssh://git@github.com:user/repo.git#ref"
}

#ref(のような部分は省略可能であり、それは分岐することができmaster、タグ(など)0.0.1)、または部分的または完全にIDをコミット。


26

NPMの最新バージョンでは、次のことができます。

npm install gitAuthor/gitRepo#tag

リポジトリが有効なNPMパッケージである場合、package.jsonで次のように自動エイリアスされます。

{ "NPMPackageName": "gitAuthor/gitRepo#tag" }

これを@justingordonの回答に追加できれば、今は手動でエイリアスを作成する必要はありません。


4
そうではありません。正しくインストールされません。どういうわけか、それはリポジトリからの全体のディレクトリ構造を含まず、package.json、yarn.lock、readme、およびライセンスのようないくつかのファイルのみを含みます。srcまたはdistフォルダーはありません。
StalkAlex 2017

@StalkAlex docs.npmjs.com/cli/publishを実行し、インストールするリポジトリのビルドスクリプトを確認します。タグ付けされているか、ポストインストールが機能しない可能性があります。それはとにかくその特定のパッケージの問題です。
ボルテックス

@vortexありがとう、タグ付けとはどういう意味ですか?これはどのようにそのような問題を引き起こしますか?
StalkAlex 2017

0

それが誰かを助ける場合、私は上記のすべてを試してみました(https w / tokenモード)-それでも何も機能しませんでした。エラーは発生しませんでしたが、node_modulesまたはpackage_lock.jsonには何もインストールされませんでした。リポジトリ名やユーザー名などのトークンや文字を変更した場合-エラーが発生します。だから私は正しいトークンとレポ名を持っていることを知っていました。

私がようやくそれを理解したのは、package.jsonにある依存関係の名前が、プルしようとしたリポジトリのpackage.jsonの名前と一致しないためです。npm install --verboseでさえ問題がないとは言わない。エラーのない依存関係を無視するようです。

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