¿Debería confirmar la carpeta node_modules en Git?

El 2021 JavaScript Full-Stack Bootcamp está ABIERTO PARA INSCRIPCIONES!

¿Debería confirmar la carpeta node_modules en 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 por defecto es no cometer la carpeta node_modules, y en su lugar añadirla a su archivo .gitignore.

Puede que tengas necesidades especiales que reviertan esta decisión.

Discuto el tema para que puedas hacer tu propia opinión.

Aquí hay algunos argumentos a favor de no cometer node_modules

Mantienes tu historial Git limpio. Cuando añades un nuevo paquete, almacenas los cambios de los archivos package.json y package-lock.json.Cuando decides actualizar la versión del paquete, todo lo que almacenas es el cambio del archivo package-lock.json.

package-lock.jsonEs una característica relativamente nueva de npm, que obvia el comando shrinkwrap usado en el pasado

Evitas tener que poner posiblemente cientos de MB de dependencias en tu repositorio, y esto significa que con el tiempo será más rápido trabajar con él. El cambio de ramas y la comprobación del código son 2 operaciones enormemente afectadas por el tamaño del repositorio.

Cuando se trabaja con ramas, podría tener conflictos de fusión que se extienden más allá de su código, y en su lugar, implican el código de las dependencias. Esto no es agradable de tratar y podría hacerle perder mucho tiempo. Evitar poner

Una pull request o merge si cambia las dependencias, va a tener muchos más archivos involucrados en el proceso. Las herramientas se vuelven más lentas o incluso deciden no mostrar el diff completo (GitHub, por ejemplo)

Los módulos nativos de nodos necesitan ser recompilados si despliegas en una plataforma diferente a tu máquina de desarrollo(caso de uso común: desarrollas en Mac, despliegas en Linux). Necesitas llamar a npm rebuild, lo que hace que el servidor se desincronice.

No comprometer node_modules implica que necesitas listar todos tus módulos en el package.json (y package-lock.json) como un paso obligatorio. Esto es genial porque podrías no tener la diligencia de hacerlo, y algunas de las operaciones de npm podrían romperse si no lo haces.

Consejo: no hay necesidad de usar la versión específica en tu archivo package.json, ya no desde la introducción del archivo package-lock.json.

Si usas conjuntos dependencies y devDependencies separados, al confirmar la carpeta node_modules básicamente estás confirmando la devDependencies y no hay forma (fácil) de que la compilación de producción se deshaga de ellos.

Razones que podrían llevarte a confirmar node_modules, y cómo mitigarlas

Un paquete npm podría ser eliminado por su autor del registro npm. Sucedió con el famoso incidente de left-pad en 2016 (leer más). Es muy raro que esto ocurra con paquetes populares. Si esto sucede, es posible que ya no tengas acceso a esa pieza de funcionalidad en particular.

También podrías argumentar que npm no está garantizado que permanezca alrededor indefinidamente, podría desaparecer, por lo que una manera fácil de garantizar tener el código completo de tu aplicación en el futuro es confirmarlo junto con tu aplicación.

Cada vez que uses un paquete, crea un fork en GitHub. De vez en cuando, mantenlo actualizado con el origen (se puede automatizar).

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

Puedes utilizar un servidor de repositorios privado para tu proyecto, y utilizarlo para alojar todas tus dependencias.

Las opciones incluyen

  • sinopia
  • npm_lazy
  • npm-lazy-mirror
  • artifactory
  • npm Enterprise, de la empresa npm

Otra razón para confirmar las dependencias es la posibilidad de editar rápidamente el código, si encuentras un error o si quieres añadir algo a una biblioteca.

Esto es un arma de doble filo: si lo haces, pierdes la capacidad de actualizar el paquete si se hacen nuevas versiones, y sólo sirve para hacer arreglos rápidos y temporales.

La solución óptima es enviar un PR que haga lo que quieres al proyecto original o bifurcarlo y usar tu bifurcación como dependencia.

Descarga mi manual gratuito de Node.js

¡El 2021 JavaScript Full-Stack Bootcamp ESTÁ ABIERTO PARA INSCRIPCIONES HASTA EL PRÓXIMO MARTES! No pierdas esta oportunidad, ¡inscríbete HOY!

Más tutoriales de node:

  • Cómo usar promesas y await con funciones basadas en callback de Node.js
  • Los módulos del núcleo de Node
  • Parar JSON con Node.js
  • Trabajar con descriptores de archivo en Node
  • Node.js Streams
  • Cómo obtener la última fecha de actualización de un archivo usando Node.js
  • La Guía Pug
  • Obtener la carpeta actual en Node
  • Cómo usar la REPL de Node.js

.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.