Angenommen, ich habe ein Modul für Node.js geschrieben, das ich privat halten möchte. Ich weiß, dass ich die Zeile hinzufügen kann (sollte):
"private": "true"
zu der package.json
Datei, und ich weiß auch, dass ich npm install
dieses Modul über einen Dateisystempfad oder einen Link zu einem Git-Repository, einschließlich GitHub, verwenden kann.
Ich weiß auch, dass ich einen solchen Dateisystempfad oder einen Link zu einem Git-Repo einfügen kann package.json
, damit der dependencies
Teil ungefähr so aussieht:
"dependencies": {
"myprivatemodule": "[email protected]:..."
}
Was ich jetzt möchte, ist nicht auf die neueste Version zu verlinken, sondern auf eine bestimmte. Die einzige mir bekannte Möglichkeit besteht darin, mithilfe seiner ID eine Verknüpfung zu einem bestimmten Commit herzustellen. Dies ist jedoch weitaus weniger lesbar und schlechter zu warten als die Verwendung einer Versionsnummer wie 0.3.1
.
Meine Frage lautet also: Ist es überhaupt möglich, eine solche Versionsnummer anzugeben und npm das Git-Repository nach dem neuesten Commit durchsuchen zu lassen, das diese Version enthält?
Wenn nicht, wie lösen Sie dieses Problem in Ihren Projekten? Leben Sie mit Commit-IDs oder gibt es eine bessere Lösung dafür?
git tag -a "1.0.0"
und gepushtgit push --tags
, dann habe ich die#v1.0.0
am Ende dergit+ssh
Abhängigkeit hinzugefügt . Abernpm update
es passiert nichts.v
notwendig ist. Nach dem#
sollte das Fragment mit dem vollständigen Namen des Tags (oder einem anderen Commitsh ) übereinstimmen - in Ihrem Fall#1.0.0
.npm i {owner}/{project}#{tag}
oder hinzufügen"{library}": "github:{owner}/{project}#{tag}"
, anstatt[email protected]
odergit://github.com
Die akzeptierte Antwort hat bei mir nicht funktioniert. Folgendes mache ich, um ein Paket aus Github zu ziehen:
Oder fügen Sie es manuell auf package.json hinzu:
quelle
"package": "git+https://github.com/username/package.git#commit"
#tag
die in der Regel auf eine Versionsnummer zeigtgit tag -a v1.0.1 && git push --tag && git push
wie @Jonathan Lonowski auch in einem Kommentar sagte.Wenn Sie mit Version ein Tag oder eine Veröffentlichung meinen, bietet github Download-Links für diese. Zum Beispiel, wenn ich installieren mag holen Version 0.3.2 (es ist nicht auf npm ist), dann füge ich meine
package.json
unterdependencies
:Der einzige Nachteil im Vergleich zum Commit-Hash-Ansatz besteht darin, dass ein Hash garantiert keinen geänderten Code darstellt, während ein Tag ersetzt werden könnte. Zum Glück passiert das selten.
Aktualisieren:
Heutzutage verwende ich die kompakte Notation für eine von GitHub bereitgestellte Abhängigkeit:
Wo Commit etwas Commit sein kann, wie ein Tag. Im Fall von GitHub können Sie sogar die Initiale löschen,
github:
da dies die Standardeinstellung ist.quelle
Mein Beispielkommentar zu @qubyte oben wurde gehackt, also hier ist etwas, das leichter zu lesen ist ...
Das Verfahren @surjikal beschrieben über Werke für Zweig Commits, aber es hat nicht funktioniert für einen Baum befehle ich versuchte , umfassen.
Der Archivierungsmodus funktioniert auch für Commits. Zum Beispiel holen Sie @ a2fbf83
npm :
Garn :
Format :
Hier ist das Tree Commit, für das der
/archive/
Modus erforderlich ist:für das zugehörige vuex commit
quelle
Dieser Befehl installiert das npm-Paket
username/package
von einem bestimmten Git-Commit:Hier
3d0a21cc
sind die ersten 8 Zeichen des Commit-Hash.quelle
Ich beschreibe hier ein Problem, mit dem ich beim Ausführen konfrontiert war
npm install
- das Paket wird nicht angezeigtnode_modules
.Das Problem war, dass sich der
name
Wertpackage.json
des installierten Pakets vom Namen des importierten Pakets unterschied (Eingabepackage.json
meines Projekts).Wenn Ihr installierter Projektname also
some-package
(Name Wert in seinerpackage.json
) ist,package.json
schreiben Sie in Ihr Projekt :"some-package": "owner/some-repo#tag"
.quelle
name
Anforderung wird im Netz nicht oft erwähnt. (zumindest nicht, dass ich daran beteiligt sein könnte.)npm install --save git+https://<remote-github-repo-url>
ein ziemlich sicherer Weg ist, um dieses Problem in Zukunft nicht mehr zu lösen.Ich musste zwei Versionen von tfjs-core ausführen und stellte fest, dass beide nach der Installation erstellt werden mussten.
package.json:
Dann:
Und schließlich, um die Bibliotheken zu nutzen:
Das hat super geklappt, ist aber mit Sicherheit #hoodrat
quelle
Wenn Sie dies mit mehr als einem Modul tun und mehr Kontrolle über Versionen haben möchten, sollten Sie eine eigene private npm-Registrierung in Betracht ziehen.
Auf diese Weise können Sie Ihre Module in Ihrer privaten npm-Registrierung veröffentlichen und die Einträge für package.json genauso verwenden wie für öffentliche Module.
https://docs.npmjs.com/files/package.json#dependencies
quelle