He estado trabajando en un sitio web que es una colección de aplicaciones de una sola página. Tengo un monorepo que consta de mis aplicaciones en directorios separados, y cada aplicación tiene su propio paquete.json. Además de esto, cada aplicación contiene uno o más submódulos de git, donde coloco mis bibliotecas principales (por ejemplo, una para la biblioteca "común", otra para SVG, etc.). En general, estoy contento con esta configuración. Funciona bien con las herramientas, ya que el submódulo está directamente dentro del directorio de la aplicación y facilita la versión del código.
EDITAR: una estructura de directorio de ejemplo, donde "común" es el submódulo git:
interfaz/aplicación1/común
interfaz/aplicación2/común
Dicho esto, el mayor defecto ha sido el manejo de las dependencias, ya que a veces hay dependencias que me gustaría tener en todas las aplicaciones. Dado que cada aplicación tiene su propio paquete.json, esto significa que tengo que instalar manualmente esa dependencia en todas mis aplicaciones, en caso de que alguna vez use esa dependencia en mi biblioteca común.
Lo que estoy buscando es una forma de dividir un paquete.json, de modo que pueda (por ejemplo), apuntar el paquete.json de la aplicación al paquete.json (hipotético) de la biblioteca común y heredar sus dependencias. Soy consciente de que esto no es posible con package.json, pero no puedo evitar sentir que esto es lo suficientemente común como para que exista una alternativa.
Sé que los espacios de trabajo de Yarn brindan la capacidad de crear paquetes locales, pero esto causa estragos en las herramientas del proyecto y hace que sea más difícil realizar cambios rápidos en el código.
¿Existen buenas soluciones alternativas que no impliquen la creación de un sistema de plantillas hacky? mi pila es:
Digamos que tienes estas carpetas:
- app1 - app2 - common Y en la carpeta common tiene package.json con el paquete node-fetch , por ejemplo.
Además, en common tienes index.js con algo como esto:
import fetch from "node-fetch"; export const getPage = async (page) => await fetch(page); Luego, en app1 tienes app.js con:
import { getPage } from "../common" const data = await getPage("http://x.com"); Ahora todo lo que tiene que hacer es ejecutar npm install dentro de su carpeta common .
También puede ser un submódulo de git, no importa. No necesita agregar node-fetch en su app1 para que esto funcione.
También podría enfrentar otro problema: demasiados package.json . Para lo cual escribí un script basado en listr que los encuentra todos recursivamente y ejecuta npm install o npm test para todos ellos en paralelo. Todavía no está publicado, pero puedo compartir algunos fragmentos si está interesado.