Comment éditer un module de nœud installé via npm?


125

J'utilise le module node_swiz, qui à son tour utilise le module validator.

Je souhaite apporter des modifications au module de validation, mais j'ai utilisé npm install pour installer les modules / dépendances.

Puis-je simplement apporter des modifications au module de validation à l'intérieur de node_modules, ou ces dépendances node_modules seront-elles recréées et la dernière version sera-t-elle obtenue lorsque je publie sur heroku ou la prochaine fois que j'exécuterai npm install?

La structure ressemble à ceci:

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

Merci pour l'aide!

Réponses:


244

Vous pouvez modifier le fichier directement, mais cela serait écrasé à chaque mise à jour de npm, la meilleure chose à faire est d'aller directement à la source.

Si les modifications affectent les fonctionnalités du module global, et peuvent être utiles à d'autres, vous pouvez contribuer à la source d'origine sur github et rechercher la modification à implémenter.

Si c'est une fonctionnalité propriétaire qui est nécessaire et n'aiderait pas le développement du module, la meilleure chose à faire est de la dériver de github et d'apporter vos modifications. Vous pouvez installer des éléments directement à partir de github à l'aide de NPM, et cette méthode vous permettrait d'intégrer les futures modifications à votre version personnalisée à partir de la source d'origine.

Pour installer directement à partir de github, utilisez la commande suivante:

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


2
Merci! C'est exactement ce que je voulais savoir. Aussi, pour les autres lisant ceci ... Je voulais inclure le module qui se trouve sur mon github dans le fichier package.json, et il y a des informations ici à ce sujet: stackoverflow.com/a/8306715/1810875
user1810875

22
avant de bifurquer, je le change dans le système local, mais le changement ne semble pas affecter. La modification d'un fichier javascript qui est node_modules / package_name / lib / file_name.js affecte?
curieux

1
Juste une note, je ne sais pas si quelque chose a changé mais personnellement, j'ai dû spécifier l'URL Git comme git: //github.com/ <user> / <package> .git "
Craig

5
@JohnDevor Au lieu d'installer le module personnalisé, utilisez la commande "npm link" pour simplement créer un lien symbolique
Venryx

3
Je l'ai compris, j'ai dû naviguer vers le dossier /node_moduleset exécuter, npm installalors tout va bien!
Adam Moisa

8

Vous pouvez utiliser patch-package pour apporter et conserver les modifications des modules de nœud.

Cela peut être fait en apportant d'abord des modifications au package à l'intérieur node_modules, puis en exécutant la commande suivante, avec <package name>le nom du package auquel vous venez d'apporter des modifications.

npx patch-package <package name>

patch-package créera alors un patchesdossier avec un fichier à l'intérieur, représentant vos modifications. Ce fichier peut ensuite être validé dans git, et les correctifs peuvent être restaurés plus tard en exécutantnpx patch-package (sans aucun argument).

Étape facultative:

Ajoutez ce qui suit dans la section script de votre package.json pour corriger automatiquement la dépendance lorsque vous exécutez "npm install".

"postinstall": "npx patch-package" 

1
Très belle solution qui a fonctionné pour moi sans aucun problème.
ヨ ハ ン ソ ン

c'est vraiment cool! FYI: j'ai dû utiliser "preinstall" au lieu de "postinstall" car mon patch était au script de post-installation de la dépendance. Comment implémenteriez-vous cela si vous aviez d'autres correctifs à appliquer dans la phase de post-installation?
Superole le

1
Réponse incroyable, je devais apporter des modifications à un dep avant de le déployer sur netlify. preinstall 'npx patch-package' était le ticket magique. L'image appropriée est maintenant affichée sur le site Web.
TheBetterJORT

1

Je ne voulais pas publier un nouveau module et je ne voulais pas non plus npm installécraser mes modifications. J'ai trouvé une solution à ces deux problèmes, mais il serait probablement préférable de suivre les conseils de @ Sdedelbrock. Mais si vous voulez le faire, voici comment:

  1. Modifiez votre package.json fichier pour supprimer la dépendance que vous souhaitez modifier.
  2. Allez dans votre projet /node_moduleset déplacez le dossier ailleurs dans votre référentiel qui peut être validé. Alors maintenant /node_modules/dependencyest à/dependency
  3. cd dans le répertoire des dépendances et tapez npm link
  4. cd dans la racine de votre répertoire de projet et tapez npm link dependency Il est important que vous le fassiez en dehors de /node_moduleset/dependency

Si tout fonctionnait, vous devriez maintenant avoir un lien symbolique qui a été créé dans /node_modules/dependency . Vous pouvez maintenant exécuter votre projet pour voir s'il fonctionne.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.