Come modificare un modulo nodo installato tramite npm?


125

Sto usando il modulo node_swiz, che a sua volta usa il modulo validatore.

Voglio apportare modifiche al modulo validatore, ma ho usato npm install per installare i moduli / dipendenze.

Posso semplicemente apportare modifiche al modulo di convalida all'interno di node_modules, o le dipendenze di node_modules verranno ricreate e l'ultima versione sarà ottenuta quando pubblico su heroku o la prossima volta che eseguo l'installazione di npm?

La struttura si presenta così:

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

Grazie per l'aiuto!

Risposte:


244

Puoi modificare il file direttamente, ma questo verrebbe sovrascritto ogni volta che npm si aggiorna, la cosa migliore da fare è andare direttamente alla fonte.

Se le modifiche influiscono sulla funzionalità dell'intero modulo e possono essere utili ad altri, potresti voler contribuire alla fonte originale su GitHub e cercare la modifica da implementare.

Se questa è una funzionalità proprietaria che è necessaria e non aiuta lo sviluppo del modulo, la cosa migliore da fare è fare il fork da GitHub e apportare le modifiche. Puoi installare elementi direttamente da GitHub utilizzando NPM e questo metodo ti consentirà di integrare le modifiche future nella tua versione personalizzata dalla fonte originale.

Per installare direttamente da GitHub, usa il seguente comando:

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


2
Grazie! È esattamente quello che volevo sapere. Inoltre, per gli altri la lettura di questo ... ho voluto includere il modulo che è sul mio github nel file package.json, e non c'è informazioni qui su questo: stackoverflow.com/a/8306715/1810875
user1810875

22
prima di eseguire il fork lo sto cambiando nel sistema locale, ma il cambiamento non sembra avere effetto. La modifica di qualsiasi file javascript che è node_modules / package_name / lib / file_name.js influisce?
curioso

1
Solo una nota, non sono sicuro che qualcosa sia cambiato, ma personalmente ho dovuto specificare l'URL di Git come git: //github.com/ <user> / <package> .git "
Craig

5
@JohnDevor Invece di installare il modulo personalizzato, usa il comando "npm link" per creare semplicemente un collegamento simbolico alla sua cartella: docs.npmjs.com/cli/link
Venryx

3
Capito, ho dovuto navigare nella cartella /node_modulesed eseguire npm installquindi tutto bene!
Adam Moisa

6

È possibile utilizzare il pacchetto patch per apportare e rendere persistenti le modifiche ai moduli del nodo.

Questo può essere fatto apportando prima le modifiche al pacchetto all'interno node_modulese quindi eseguendo il seguente comando, con <package name>il nome del pacchetto a cui hai appena apportato le modifiche.

npx patch-package <package name>

patch-package creerà quindi una patchescartella con un file all'interno, che rappresenta le modifiche. Questo file può quindi essere inviato a git e le patch possono essere ripristinate in seguito eseguendo npx patch-package(senza argomenti).

Passaggio facoltativo:

Aggiungi quanto segue nella sezione script del tuo package.json per correggere automaticamente la dipendenza quando esegui "npm install".

"postinstall": "npx patch-package" 

1
Soluzione molto bella che ha funzionato per me senza problemi.
ヨ ハ ン ソ ン

questo è davvero fantastico! FYI: ho dovuto usare "preinstall" invece di "postinstall" perché la mia patch era per lo script postinstall della dipendenza. Come lo implementeresti se avessi altre patch da applicare nella fase di postinstallazione?
Superole

1
Risposta incredibile, avevo bisogno di apportare modifiche a un dep prima di distribuirlo a netlify. preinstall 'npx patch-package' era il biglietto magico. L'immagine corretta è ora mostrata sul sito web.
TheBetterJORT

1

Non volevo pubblicare un nuovo modulo e non volevo nemmeno npm installsovrascrivere le mie modifiche. Ho trovato una soluzione a entrambi questi problemi, ma probabilmente sarebbe meglio seguire il consiglio di @ Sdedelbrock. Ma se vuoi farlo, ecco come:

  1. Modifica il package.jsonfile per rimuovere la dipendenza che desideri modificare.
  2. Vai nel tuo progetto /node_modulese sposta la cartella da qualche altra parte nel tuo repository che può essere salvata. Quindi ora /node_modules/dependencyè a/dependency
  3. cd nella directory delle dipendenze e digitare npm link
  4. cdnella directory principale del tuo progetto e digita npm link dependency È importante che tu lo faccia al di fuori di /node_modulese/dependency

Se tutto ha funzionato, ora dovresti avere un collegamento simbolico creato in /node_modules/dependency. Ora puoi eseguire il tuo progetto per vedere se funziona.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.