Estoy ejecutando un proyecto monorepo de Node.js usando espacios de trabajo de hilo. La estructura del archivo se ve así:
workspace_root node_modules package.json apps appA node_modules package.json appB node_modules package.json libs libA dist node_modules package.json Todas las aplicaciones son independientes, pero todas requieren libA
Estoy ejecutando todas estas aplicaciones con docker-compose. Mi pregunta aquí es cómo manejar correctamente todas las dependencias, ya que no quiero que las carpetas de node_modules se sincronicen con host. Localmente, cuando ejecuto yarn install en la raíz del espacio de trabajo, instala todas las dependencias para todos los proyectos, completando los diferentes node_modules . En docker-compose, idealmente cada aplicación no debería estar al tanto de otras aplicaciones.
Mi enfoque hasta ahora, que funciona pero no es ideal y no es muy escalable.
version: "3.4" services: # The core is in charge of installing dependencies for ALL services. Each service must for wait the core, and then # just do their job, not having to handle install. appA: image: node:14-alpine volumes: # We must load every volumes for install - .:/app # Mount the whole workspace structure - root_node_modules:/app/node_modules - appA_node_modules:/app/apps/appA/node_modules - appB_node_modules:/app/apps/appB/node_modules - libA_node_modules:/app/libs/libA/node_modules working_dir: /app/apps/appA command: [sh, -c, "yarn install && yarn run start"] appB: image: node:14-alpine volumes: # We must load every volumes for install - .:/app # Mount the whole workspace structure - root_node_modules:/app/node_modules - appB_node_modules:/app/apps/appB/node_modules working_dir: /app/apps/appB command: [sh, -c, "/scripts/wait-for-it.sh appA:4001 -- yarn run start"] # And so on for all apps.... volumes: root_node_modules: driver: local appA_node_modules: driver: local appB_node_modules: driver: local libA_node_modules: driver: localLos principales inconvenientes que veo:
appA es responsable de instalar las dependencias de TODAS las aplicaciones.Me gustaría evitar una compilación para el desarrollo, ya que debe hacerse cada vez que agrega una dependencia, es bastante engorroso y lo está ralentizando.