Dies ist keine völlig neue Frage, aber ich habe mich schon eine Weile umgesehen und habe Probleme, eine Lösung zu finden.
Ich verwende ein Modul für meine Winkel-App namens Angular-Translate. Ich musste jedoch einige kleine Änderungen am Quellcode vornehmen, damit alles so funktioniert, wie ich es möchte, und jetzt möchte ich diese Änderungen beibehalten npm install
. Ein Kollege schlug vor, das Repo des Quellcodes zu teilen und auf mein gespaltenes Repo als Abhängigkeit zu verweisen, was ich auf diese Weise versucht habe, z
npm install https://github.com/myRepo/angular-translate
npm install https://github.com/myRepo/angular-translate/archive/master.tar.gz
Das erste gibt mir ein Verzeichnis wie dieses ohne Build. Nur ein package.json, .npmignore und einige Markdown-Dateien
-angular-translate
.npmignore
.nvmrc
CHANGELOG.md
package.json
etc
Das zweite npm install
gibt mir das volle Repo, aber ich bekomme wieder keinen Build wie bei Verwendung des Befehls npm install angular-translate
. Ich habe einige Diskussionen über das Ausführen des vorveröffentlichten Skripts gesehen, bin mir jedoch nicht sicher, wie dies bei der Installation aller Module geschehen soll. Ich habe auch versucht, den Fork als mein eigenes Modul in der npm-Registrierung zu veröffentlichen, aber ich bekomme wieder keinen Build und bin mir nicht sicher, ob das das Richtige ist ...
Ich entschuldige mich für meine Unwissenheit zu diesem Thema. Ich habe nicht viel Erfahrung mit npm. Würde gerne ein Feedback zu diesem Thema bekommen. Es scheint, dass es ein häufig genug auftretendes Problem sein könnte, wenn Änderungen am Quellcode eines Pakets vorgenommen werden müssen. Vielleicht gibt es eine bessere Lösung? Vielen Dank im Voraus für Ihre Hilfe.
quelle
package.json
Datei Ihrer Gabel unterscripts
umbenennenprepublish
inprepare
. Es scheint, wennnpm install
odernpm install github:user_name/fork_name --save
(und dasselbe gilt für Garn) ausgeführt wird, wird auch ausgeführt, was imprepare
Skript enthalten ist. Dies setzt voraus, dass dasprepublish
Skript dieses Pakets die Build-Dateien erstellt, was normalerweise der Fall ist.npm install <ghusername>/<repoName>#branchName
prepare
Skript, seindependencies
unddevDependencies
installiert werden, und die Vorbereitung Skript ausgeführt werden soll, bevor das Paket verpackt und installiert wird .“Update für Benutzer von npm 5:
Ich habe festgestellt, dass das Hinzufügen eines
"prepare": "npm run build"
Skripts alle meine Probleme behoben hat.quelle
npm run build
undnpm run publish
haben keine Probleme oder Schmerzen, es sei denn, sie versuchen eines Tages, das Repo über Git zu installieren?Auf npmjs.com veröffentlichter Code befindet sich häufig nicht im Repository des Pakets. Es ist üblich, JavaScript-Quelldateien in Versionen zu "kompilieren", die für den allgemeinen Gebrauch in Bibliotheken bestimmt sind. Das ist es, was normalerweise auf npmjs.com veröffentlicht wird.
Es ist so üblich, dass vor dem Veröffentlichen ( )
npm
automatisch ein "Build" -Schritt ausgeführt wird . Dies wurde ursprünglich genannt . Es scheint, dass Npm es für praktisch hielt, das Skript auch auf einem auszuführen, da dies die Standardmethode zum Initialisieren einer Entwicklungsumgebung war.npm publish
prepublish
prepublish
npm install
Dies führte zu großer Verwirrung in der Gemeinde. Es gibt sehr lange Probleme mit Github.
Um das alte Verhalten nicht zu ändern, beschlossen sie schließlich, zwei weitere automatische Skripte hinzuzufügen:
prepublishOnly
undprepare
.prepublishOnly
macht was du erwartest. Es läuft nicht weiternpm install
. Viele Paketbetreuer haben einfach blindlings darauf umgestellt.Es gab aber auch das Problem, dass die Leute sich nicht auf npmjs.com verlassen wollten, um Versionen von Paketen zu verteilen. Git-Repositories waren die natürliche Wahl. Es ist jedoch üblich, "kompilierte" Dateien nicht an git zu übergeben. Das
prepare
wurde hinzugefügt, um damit umzugehen ...prepare
ist der richtige WegWenn Sie ein Repository mit Quelldateien haben, für deren Verwendung jedoch ein "Build" -Schritt erforderlich ist,
prepare
wird in allen Fällen genau das getan, was Sie möchten (ab npm 4).Sie können sogar Ihre Build-Abhängigkeiten
devDependencies
einfügen, die vor derprepare
Ausführung installiert werden .Hier ist ein Beispiel eines Pakets von mir, das diese Methode verwendet.
Probleme mit
.gitignore
Es gibt ein Problem mit dieser Option, das viele Menschen betrifft. Bei der Vorbereitung einer Abhängigkeit behalten Npm und Yarn nur die Dateien bei, die im
files
Abschnitt von aufgeführt sindpackage.json
.Man könnte sehen, dass
files
standardmäßig alle Dateien enthalten sind und denken, dass sie fertig sind. Was ist leicht zu übersehen , dass.npmignore
vor allem die überschreibtfiles
Richtlinie und , falls.npmignore
nicht vorhanden ist ,.gitignore
wird stattdessen verwendet.Wenn Sie also Ihre erstellten Dateien
.gitignore
wie eine vernünftige Person aufgelistet haben und nichts anderes tun,prepare
wird dies als fehlerhaft erscheinenWenn Sie festlegen
files
, dass nur die erstellten Dateien eingeschlossen oder eine leere hinzugefügt werden.npmignore
, sind Sie fertig.Meine Empfehlung ist,
files
(oder durch Inversion.npmignore
) so einzustellen , dass die einzigen tatsächlich veröffentlichten Dateien diejenigen sind, die von Benutzern des veröffentlichten Pakets benötigt werden. Imho, es ist nicht nötig, nicht kompilierte Quellen in veröffentlichte Pakete aufzunehmen.Ursprüngliche Antwort: https://stackoverflow.com/a/57503862/4612476
quelle
Es
postinstall
ist definitiv eine gültige Option, die hervorragende Antwort von @ RyanZim zu nutzen .Führen Sie entweder einen der folgenden Schritte aus:
Wenn Sie das Repository einer anderen Person gespalten haben, kann es sinnvoll sein, ein Problem anzusprechen, um das Problem zu veranschaulichen, dass die Installation ihres Pakets über GitHub nicht funktioniert, da es nicht die erforderlichen Mittel zum Erstellen des Skripts bietet. Von dort aus können sie entweder eine PR akzeptieren, um dies mit einer Nachinstallation zu beheben, oder sie können sie ablehnen und Sie können # 2 tun.
quelle
"postinstall": "cd node_modules/scrape-twitter/ && npm install && npm run build"
. Wie gesagt, ich bevorzuge den Ansatz, das Repo meinem eigenen Benutzer zu überlassen, die Nachinstallation zum Paket selbst hinzuzufügen und diese in meiner Anwendung zu verwenden.postinstall
ist einen Schritt zu kurz von der richtigen Lösung. Einfach benutzenprepare
. Es ist 2020.Verwenden Sie einfach den Befehl
npm install git+https://[email protected]/myRepo/angular-translate.git
. Vielen Dank.quelle