¿Cómo editar un módulo de nodo instalado a través de npm?

124

Estoy usando el módulo node_swiz, que a su vez usa el módulo validador.

Quiero hacer cambios en el módulo de validación, pero usé npm install para instalar los módulos / dependencias.

¿Puedo simplemente hacer cambios en el módulo de validación dentro de node_modules, o se volverán a crear las dependencias de node_modules y se obtendrá la última versión cuando publique en heroku o la próxima vez que ejecute npm install?

La estructura se ve así:

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

¡Gracias por la ayuda!

usuario1810875
fuente

Respuestas:

242

Puede editar el archivo directamente, pero esto se sobrescribirá cada vez que npm se actualice, lo mejor que puede hacer es ir directamente a la fuente.

Si los cambios afectan la funcionalidad del módulo en general y pueden ser útiles para otros, es posible que desee contribuir a la fuente original en github y buscar el cambio que se implementará.

Si esta es una funcionalidad propietaria que se necesita y no ayudaría al desarrollo del módulo, lo mejor que puede hacer es bifurcarlo desde github y realizar los cambios. Puede instalar elementos directamente desde github usando NPM, y este método le permitiría integrar cambios futuros en su versión personalizada desde la fuente original.

Para instalar directamente desde github, use el siguiente comando:

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

Sdedelbrock
fuente
2
¡Gracias! Eso es exactamente lo que quería saber. Además, para otros que lean esto ... quería incluir el módulo que está en mi github en el archivo package.json, y hay información aquí al respecto: stackoverflow.com/a/8306715/1810875
user1810875
22
antes de bifurcar lo estoy cambiando en el sistema local, pero el cambio no parece afectar. Cambiar cualquier archivo javascript que sea node_modules / package_name / lib / file_name.js afecta?
inquisitivo
1
Solo una nota, no estoy seguro de si algo ha cambiado, pero personalmente tuve que especificar la URL de Git como git: //github.com/ <user> / <package> .git "
Craig
5
@JohnDevor En lugar de instalar el módulo personalizado, use el comando "npm link" para crear un enlace simbólico
Venryx
3
Lo descubrí, tuve que navegar a la carpeta /node_modulesy ejecutarlo, ¡ npm installentonces todo está bien!
Adam Moisa
6

Puede utilizar patch-package para realizar y conservar cambios en los módulos de nodo.

Esto se puede hacer primero haciendo cambios en el paquete interno node_modulesy luego ejecutando el siguiente comando, <package name>siendo el nombre del paquete en el que acaba de realizar los cambios.

npx patch-package <package name>

patch-package luego creará una patchescarpeta con un archivo dentro, que representará sus cambios. Este archivo se puede enviar a git y los parches se pueden restaurar más tarde ejecutandonpx patch-package (sin argumentos).

Paso opcional:

Agregue lo siguiente en la sección de script de su package.json para parchear automáticamente la dependencia cuando ejecute "npm install".

"postinstall": "npx patch-package" 
Pedro Fracassi
fuente
1
Muy buena solución que funcionó para mí sin ningún problema.
ヨ ハ ン ソ ン
¡esto es realmente genial! FYI: Tuve que usar "preinstall" en lugar de "postinstall" porque mi parche era para el script postinstall de la dependencia. ¿Cómo implementaría eso si tuviera otros parches que necesitaran aplicarse en la fase posterior a la instalación?
Superole
1
Increíble respuesta, necesitaba hacer modificaciones en un dep antes de implementarlo en netlify. preinstalar 'npx patch-package' fue el boleto mágico. La imagen adecuada ahora se muestra en el sitio web.
TheBetterJORT
1

No quería publicar un módulo nuevo y tampoco quería npm installsobrescribir mis cambios. Encontré una solución para ambos problemas, pero probablemente sería mejor seguir el consejo de @ Sdedelbrock. Pero si quieres hacerlo, así es como:

  1. Edite su package.jsonarchivo para eliminar la dependencia que desea editar.
  2. Vaya a su proyecto /node_modulesy mueva la carpeta a algún otro lugar de su repositorio que pueda ser comprometido. Así que ahora /node_modules/dependencyestá en/dependency
  3. cd en el directorio de dependencia y escriba npm link
  4. cden la raíz del directorio de su proyecto y escriba npm link dependency Es importante que haga esto fuera de /node_modulesy/dependency

Si todo funcionó, ahora debería tener un enlace simbólico creado en formato /node_modules/dependency. Ahora puede ejecutar su proyecto para ver si funciona.

Daniel Kaplan
fuente