Abhängig von einem Zweig oder Tag mithilfe einer Git-URL in einer package.json?

399

Angenommen, ich habe ein Knotenmodul mit einem Bugfix gegabelt und möchte meine feste Version verwenden, natürlich für einen Feature-Zweig, bis der Bugfix zusammengeführt und freigegeben wird.

Wie würde ich auf meine feste Version in dependenciesmeiner verweisen package.json?

Hurrymaplelad
quelle

Antworten:

569

Aus den npm-Dokumenten :

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

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

Ab NPM Version 1.1.65 können Sie dies tun:

<user>/<project>#<branch>
Hurrymaplelad
quelle
130
Ab npm 1.1.65 kann die Github-URL präziser sein user/project. npmjs.org/doc/files/package.json.html Sie können den Zweig wieuser/project#branch
dantheta
2
git://github.com/<user>/<project>.git#feature/blahhat funktioniert, <user>/<project>.git#feature/blahaber nicht ... vielleicht muss ihre Regex weiter fortgeschritten sein, um dies feature/blahzu berücksichtigen. Dies war npmv1.4.28
pulkitsinghal
5
Wie geben Sie die Versionsnummer an?
Richard
1
@hurrymaplelad Kann ich dasselbe für eine Pull-Anfrage tun? Wenn ja, wie ist der Befehl?
Roundrobin
3
Aktualisierte NPM-Dokumente Link docs.npmjs.com/files/package.json#github-urls
Kell
136

per @ danthetas Kommentar:

Ab npm 1.1.65 kann die Github-URL ein präziserer Benutzer / Projekt sein. npmjs.org/doc/files/package.json.html Sie können den Zweig wie user / project # branch anhängen

Damit

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

Oder für Tag v1.12.0 auf jscs:

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

Beachten Sie, wenn Sie npm --save verwenden, erhalten Sie den längeren Git

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

Git-URLs als Abhängigkeiten

Git-URLs können folgende Form haben:

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

Das Commit-ish kann ein beliebiges Tag, sha oder Zweig sein, das als Argument für das Auschecken von Git angegeben werden kann. Der Standardwert ist master.

GitHub-URLs

Ab Version 1.1.65 können Sie GitHub-URLs nur als "foo" bezeichnen: "user / foo-project". Genau wie bei Git-URLs kann ein Commit-ish-Suffix enthalten sein. Zum Beispiel:

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

Justingordon
quelle
2
Abhängig von einem Commit sollte sha1 die bevorzugte Option sein, insbesondere wenn Sie von einem Repo abhängig sind, das nicht unter Ihrer Kontrolle steht. Git-Zweige und -Tags sind nicht unveränderlich (können gelöscht / geändert werden, böswillig / versehentlich), während es (fast) unmöglich ist, eine sha1-Kollision zu erstellen.
Jakub.g
1
Kann ich eine Verzweigung UND ein Commit für Commit-ish haben?
Munchschair
45

Wenn Sie ein bestimmtes Paket verwenden develoder featureverzweigen möchten oder ein bestimmtes Paket nicht in der NPM-Registrierung veröffentlicht haben oder dies nicht können, weil es sich um ein privates Modul handelt, können Sie auf einen git://URI anstelle einer Versionsnummer in Ihrem Verzeichnis verweisen package.json:

"dependencies": {
   "public": "git://github.com/user/repo.git#ref",
   "private": "git+ssh://[email protected]:user/repo.git#ref"
}

Der #refTeil ist optional und kann ein Zweig (wie master), ein Tag (wie 0.0.1) oder eine teilweise oder vollständige Festschreibungs-ID sein.

Fizer Khan
quelle
26

In der neuesten Version von NPM können Sie einfach Folgendes tun:

npm install gitAuthor/gitRepo#tag

Wenn das Repo ein gültiges NPM-Paket ist, wird es in package.json automatisch als Alias ​​eingestuft:

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

Wenn Sie dies zu @justingordons Antwort hinzufügen könnten, wäre jetzt kein manuelles Aliasing erforderlich!

Wirbel
quelle
4
nicht, es ist nicht. Es wird falsch installiert. Irgendwie enthält es nicht die gesamte Verzeichnisstruktur aus dem Repository, sondern nur einige Dateien wie package.json, yarn.lock, readme und license. Es gibt keine src- oder dist-Ordner.
StalkAlex
@StalkAlex docs.npmjs.com/cli/publish und überprüfen Sie dann das Repo, das Sie für die Build-Skripte installieren. Vielleicht sind sie markiert oder die Nachinstallation funktioniert bei Ihnen nicht. Es ist sowieso ein Problem für dieses spezielle Paket. Ich hoffe, das hilft!
Wirbel
@vortex danke, was meinst du genau mit taggen? Wie macht das so ein Problem?
StalkAlex
0

Wenn es jemandem hilft, habe ich alles oben versucht (https mit Token-Modus) - und immer noch funktionierte nichts. Ich habe keine Fehler erhalten, aber in node_modules oder package_lock.json wurde nichts installiert. Wenn ich das Token oder einen Buchstaben im Repo- oder Benutzernamen usw. ändere, wird eine Fehlermeldung angezeigt. Also wusste ich, dass ich den richtigen Token- und Reponamen hatte.

Endlich wurde mir klar, dass der Name der Abhängigkeit, die ich in meinem package.json hatte, nicht mit dem Namen in package.json des Repos übereinstimmte, das ich abrufen wollte. Selbst npm install --verbose sagt nicht, dass es ein Problem gibt. Es scheint nur die Abhängigkeit ohne Fehler zu ignorieren.

MattS
quelle