Wie bearbeite ich ein über npm installiertes Knotenmodul?


124

Ich verwende das Modul node_swiz, das wiederum das Validator-Modul verwendet.

Ich möchte Änderungen am Validator-Modul vornehmen, habe jedoch npm install verwendet, um die Module / Abhängigkeiten zu installieren.

Kann ich einfach Änderungen am Validator-Modul innerhalb von node_modules vornehmen oder werden diese Abhängigkeiten von node_modules neu erstellt und die neueste Version erhalten, wenn ich sie in heroku veröffentliche oder wenn ich npm install das nächste Mal ausführe?

Die Struktur sieht folgendermaßen aus:

myNodeApplication
  - node_modules
     - swiz
         - node_modules
            - validator [this is the library I want to edit]

Danke für die Hilfe!

Antworten:


241

Sie können die Datei direkt bearbeiten, dies wird jedoch bei jeder Aktualisierung von npm überschrieben. Am besten gehen Sie direkt zur Quelle.

Wenn sich die Änderungen auf die Funktionalität des Gesamtmoduls auswirken und für andere nützlich sein können, möchten Sie möglicherweise einen Beitrag zur ursprünglichen Quelle auf Github leisten und nach der zu implementierenden Änderung suchen.

Wenn dies eine proprietäre Funktionalität ist, die benötigt wird und die Entwicklung des Moduls nicht unterstützen würde, ist es am besten, sie von Github zu trennen und Ihre Änderungen vorzunehmen. Sie können Elemente mithilfe von NPM direkt von Github installieren. Mit dieser Methode können Sie zukünftige Änderungen aus der Originalquelle in Ihre benutzerdefinierte Version integrieren.

Verwenden Sie den folgenden Befehl, um direkt von github zu installieren:

npm install https://github.com/<username>/<repository>/tarball/master


2
Vielen Dank! Genau das wollte ich wissen. Auch für andere, die dies lesen ... Ich wollte das Modul, das sich auf meinem Github befindet, in die Datei package.json aufnehmen, und hier gibt es Informationen dazu: stackoverflow.com/a/8306715/1810875
user1810875

22
Vor dem Gabeln ändere ich es im lokalen System, aber die Änderung scheint keine Auswirkungen zu haben. Das Ändern einer Javascript-Datei, die node_modules / package_name / lib / file_name.js ist, wirkt sich aus?
neugierig

1
Nur eine Anmerkung, nicht sicher, ob sich etwas geändert hat, aber ich persönlich musste die Git-URL als git angeben: //github.com/ <user> / <package> .git "
Craig

5
@ JohnDevor Anstatt das angepasste Modul zu installieren, verwenden Sie den Befehl "npm link", um einfach einen Sym-Link zu seinem Ordner zu erstellen: docs.npmjs.com/cli/link
Venryx

3
Ich habe es herausgefunden, ich musste zum Ordner navigieren /node_modulesund ausführen, npm installdann ist alles in Ordnung!
Adam Moisa

6

Sie können das Patch-Paket verwenden , um Änderungen an Knotenmodulen vorzunehmen und beizubehalten.

Dies kann erreicht werden, indem zuerst Änderungen am darin enthaltenen Paket vorgenommen node_modulesund dann der folgende Befehl ausgeführt wird, <package name>wobei der Name des Pakets der Name ist, an dem Sie gerade Änderungen vorgenommen haben.

npx patch-package <package name>

Das Patch-Paket erstellt dann einen patchesOrdner mit einer Datei, die Ihre Änderungen darstellt. Diese Datei kann dann an git übergeben werden, und Patches können später durch Ausführen npx patch-package(ohne Argumente) wiederhergestellt werden .

Optionaler Schritt:

Fügen Sie im Skriptabschnitt Ihrer package.json Folgendes hinzu, um die Abhängigkeit automatisch zu patchen, wenn Sie "npm install" ausführen.

"postinstall": "npx patch-package" 

1
Sehr schöne Lösung, die bei mir ohne Probleme funktioniert hat.
mpj

Das ist wirklich cool! Zu Ihrer Information: Ich musste "Preinstall" anstelle von "Postinstall" verwenden, da sich mein Patch auf das Postinstall-Skript der Abhängigkeit bezog. Wie würden Sie das implementieren, wenn Sie andere Patches hätten, die in der Nachinstallationsphase angewendet werden müssten?
Superole

1
Unglaubliche Antwort, ich musste Änderungen an einem Dep vornehmen, bevor ich es für Netlify bereitstellte. 'npx patch-package' vorinstallieren war das magische Ticket. Das richtige Bild wird jetzt auf der Website angezeigt.
TheBetterJORT vor

1

Ich wollte kein neues Modul veröffentlichen und npm installmeine Änderungen auch nicht überschreiben. Ich habe eine Lösung für beide Probleme gefunden, aber es wäre wahrscheinlich besser, den Rat von @ Sdedelbrock zu befolgen. Aber wenn Sie es tun möchten, gehen Sie wie folgt vor:

  1. Bearbeiten Sie Ihre package.jsonDatei, um die Abhängigkeit zu entfernen, die Sie bearbeiten möchten.
  2. Gehen Sie in Ihr Projekt /node_modulesund verschieben Sie den Ordner an eine andere Stelle in Ihrem Repository, die festgeschrieben werden kann. Also jetzt /node_modules/dependencyist bei/dependency
  3. cd in das Abhängigkeitsverzeichnis und geben Sie ein npm link
  4. cdin das Stammverzeichnis Ihres Projektverzeichnisses und geben npm link dependency Sie Es ist wichtig, dass Sie dies außerhalb von /node_modulesund tun/dependency

Wenn alles funktioniert hat, sollten Sie jetzt einen Symlink haben, der in erstellt wurde /node_modules/dependency. Jetzt können Sie Ihr Projekt ausführen, um zu sehen, ob es funktioniert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.