¿Deberías enviar la carpeta node_modules a Git?

Es una buena pregunta. Hay pros y contras. Hablo del tema para que puedas hacer tu propia opinión.

¿Deberías enviar la carpeta node_modules a Git?

Menciono Git, pero lo mismo se aplica a cualquier sistema de control de versiones que utilices.

Es una buena pregunta. Hay pros y contras.

Sugiero que el valor predeterminado esnoConfirme la carpeta node_modules y, en su lugar, agréguela a su.gitignoreexpediente.

Es posible que tenga necesidades especiales que reviertan esta decisión.

Hablo del tema para que puedas hacer tu propia opinión.

Aquí hay algunos argumentos a favor de no comprometer node_modules

Mantienes limpio tu historial de Git. Cuando agrega un nuevo paquete, almacena elpackage.jsonypackage-lock.jsoncambios de archivo. Cuando decide actualizar la versión del paquete, todo lo que almacena es elpackage-lock.jsoncambio de archivo.

package-lock.jsones una característica relativamente nueva de npm, que deja obsoleta laEnvoltura retráctilcomando usado en el pasado

Evita tener que poner posiblemente cientos de MB de dependencias en su repositorio, y esto significa que con el tiempo será más rápido trabajar con él. Cambiar de rama y verificar el código son 2 operaciones muy afectadas por el tamaño del repositorio.

Al trabajar con ramas, es posible que tenga conflictos de fusión que se extiendan más allá de su código y, en su lugar, involucren el código de dependencias. No es agradable lidiar con esto y puede hacer que pierda mucho tiempo. Evitando poner

Una solicitud de extracción o fusión si se cambian las dependencias, tendrá muchos más archivos involucrados en el proceso. Las herramientas se vuelven más lentas o incluso deciden no mostrar la diferencia completa (GitHub, por ejemplo)

Los módulos de nodos nativos deben recompilarse si implementa en una plataforma diferente a su máquina de desarrollo (caso de uso común: desarrolla en Mac, implementa en Linux). Necesitas llamarnpm rebuild, lo que desincroniza el servidor.

No confirmar node_modules implica que debe enumerar todos sus módulos en elpackage.json(ypackage-lock.json) como paso obligatorio. Esto es genial porque es posible que no tenga la diligencia para hacerlo, y algunas de las operaciones de npm podrían fallar si no lo hace.

Sugerencia: no es necesario utilizar la versión específica en supackage.jsonarchivo, no más desde la introducción de lapackage-lock.jsonexpediente.

Si usa por separadodependenciesydevDependenciesconjuntos, cometiendo elnode_modulescarpeta que básicamente está cometiendo eldevDependenciesy no hay una forma (fácil) de que la compilación de producción se deshaga de ellos.

Razones que pueden llevarlo a comprometer node_modules y cómo mitigarlos

Unnpmsu autor puede eliminar el paquete del registro npm. Pasó con los famososleft-pad incident in 2016 (leer más). Esto es muy raro que suceda con paquetes populares. Si esto sucede, es posible que ya no tenga acceso a esa función en particular.

También podrías argumentar quenpmno se garantiza que permanezca indefinidamente, podría desaparecer, por lo que una manera fácil de garantizar tener el código completo de su aplicación en el futuro es enviarlo junto con su aplicación.

Cada vez que use un paquete, cree una bifurcación en GitHub. De vez en cuando, manténgalo actualizado con el origen (se puede automatizar).

Esto no siempre es práctico, ya que los paquetes pueden tener docenas de sus propias dependencias.

Puede utilizar un servidor de repositorio privado para su proyecto y utilizarlo para alojar todas sus dependencias.

Las opciones incluyen

Otra razón para confirmar las dependencias es la capacidad de editar rápidamente el código, si encuentra un error o si desea agregar algo a una biblioteca.

Esta es una espada de doble filo: si lo hace, perderá la capacidad de actualizar el paquete si se realizan nuevas versiones, y es bueno para arreglos temporales rápidos.

La solución óptima es enviar un PR que haga lo que quiere para el proyecto original o bifurcarlo y usar su bifurcación como dependencia.

Descarga mi gratisManual de Node.js


Más tutoriales de nodos: