En el siguiente documento cubrimos los siguientes temas
Este proyecto es un monorepo con distintos packages. Usamos Yarn workspaces para manejar los mismos.
Dentro de la carpeta /packages tenemos sub-carpetas agrupando distintos packages según tipo:
- backend agrupa todos de backend
- web contiene los que sean web o mobile
- commons agrupa aquellos que serán compartidos entre otros packages (por ej. lógica de negocios, llamadas a APIs, validación, etc)
Dependiendo de qué packages usan cada dependencia, yarn va a instalar la misma dentro de la carpeta node_modules del raíz del proyecto o del proyecto específico.
Si por alguna razón se quiere forzar a un dependencia a ser instalada dentro de los
node_modulesdel proyecto específicamente, se puede hacer agregando la misma dentro delpackage.jsondel proyecto en el campoworkspaces.nohoist
Para instalar todas las dependencias de todos los proyectos, correr el siguiente comando (desde cualquier carpeta)
yarn
IMPORTANTE: es obligatorio usar yarn en vez de npm
Desde la carpeta raíz se puede ejecutar yarn workspace <package_name> <command> (por ej. yarn workspace @naveng-jobs/semanas start) para ejecutar comandos propios de cada proyecto.
Además tenemos algunos comandos definidos en los package.json (tanto en el root del monorepo como en cada package) para las tareas más comunes.
Dentro del root del proyecto tenemos:
yarn clean elimina todos los node_modules y el archivo yarn.lock, para que todas las dependencias vuelvan a instalarse de cero en el próximo yarn install
yarn test ejecuta los tests de cada package
Nos basamos en el Github Flow y usamos Squash and merge para hacer el merge de cada pull request.
Cada branch debe incluir en su nombre el id del ticket de JIRA como prefijo (por ej. ABC-123-login) para que JIRA pueda mostrar las ramas relacionadas a cada ticket.
También los mensajes de cada commit deberían incluir el mismo prefijo (por ej. [ABC-123] Some message) por la misma razón.
Puede que una ticket de JIRA tenga asociadas subtareas, así un branch puede estar asociado a un id y sus commits a otros. Por ejemplo, el branch
ABC-123-loginpuede contener los commitsABC-126-login-page,ABC-127-login-apiyABC-130-logout.
Usamos ESLint para detectar "malas prácticas" relacionadas a code styling.
Tenemos un archivo de configuración (llamado .eslintrc) base en la carpeta raíz del proyecto y luego uno por cada package que extiende del base y agrega/modifica algunas reglas específicas del proyecto.
Usamos Prettier para dar formato a nuestro código automáticamente.
Tenemos un único archivo de configuración (.prettierrc) en la carpeta raíz que se usa en todos los packages.
Recomendamos enfáticamente instalar un plugin para tu editor y habilitar la opción format on save (si existe).