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.