Contribuir en Mercury
Introducción
Entendemos como contribuir en el core de Mercury cuando estamos trabajando para añadir alguna funcionalidad, aplicar algún fix o mejora al propio Mercury.
Requerimientos
- NodeJS 16
- Google Artifact Registry
- YARN
Instalación de requerimientos
NodeJS
nvm para poder instalar y cambiar fácilmente entre versiones de NodeJS.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
nvm install 16
Google Artifact Registry
Tener NPM configurado para poder descargar paquetes de repositorio privado de google e instalar gestor de dependencias para Javascript.
npx google-artifactregistry-auth
npm install -g npm@9.4.0
YARN
YARN (alternativa a NPM, la cual es la usada en el proyecto)
npm install -g yarn
Preparación de entorno local
1. Clonar proyecto
Tras clonar el repositorio deo de Mercury:
git clone git@bitbucket.org:etailers/mercury.git
La estructura de directorios sería como la siguiente:

Tenemos varios directorios destacados:
- app
- contiene las aplicaciones, las cuales usan Mercury. Por defecto viene la aplicación “demo” para un Adobe Commerce, y “docs” que contiene la documentación de Mercury.
- packages
- Contiene el código de los distintos paquetes que componen Mercury. Más adelante los veremos más detalladamente.
Los detalles de esta estructura de directorios los iremos viendo en la documentación.
2. Instalar paquetes
Una vez tengamos descargada la aplicación iremos al root del proyecto e instalaremos todos los paquetes:
npx google-artifactregistry-auth
yarn
Comandos
Podemos consultar los comandos disponibles en el fichero package.json del root de Mercury:
yarn dev
- Inicializa Mercury en modo desarrollo con las aplicaciones por defecto: demo y docs.
yarn workspace @mercury/docs dev
- Inicializa en modo desarrollo la aplicación de “docs”.
yarn dev:packages —filter=<app_name>
- Inicializa Mercury en modo desarrollo para una aplicación en concreto, que no sea ni “demo” ni “docs”.
yarn build
- Lo usaremos cuando queramos hacer “build” de la Mercury. Es recomendable ejecutarlo antes de hacer un “merge” de nuestras modificaciones para comprobar que no hay ningún error, y para testear la aplicación como si estuviéramos en modo producción.
yarn lint
Ejecuta el linter para poder encontrar errores en la aplicación.
yarn format
Formatea los archivos .ts, .tsx, .md del proyecto.
yarn publish-packages
- TO DO
yarn install
Para descargar e instalar todos los paquetes.
yarn clear
Para limpiar la instalación. Después de este comando habrá que ejecutar “yarn” para que vuelva a instalar todos los paquetes.
yarn copy-to-base
- TO DO
yarn copy-from-app <existing/app/path> <app_name>
Copia la aplicación que se encuentra en la ruta indicada al directorio “app” para poder ser usada para desarrollar en Mercury.
yarn copy-to-app <existing/app/path> <app_name>
Copia la aplicación <app_name> del directorio “app” de Mercury a la ruta indicada.
Importar aplicación
En muchas ocasiones cuando queremos desarrollar una mejora o algún fix de Mercury es por qué lo hemos encontrado trabajando en algún proyecto en concreto, y para reproducirlo necesitamos que Mercury se ejecute en ese entorno.
En estos casos lo que haremos es importar la aplicación a nuestra instalación de Mercury usando el comando **yarn copy-from-app. Por ejemplo:
yarn copy-from-app ~/Sites/eshop-horeca-front horeca
Este comando copia la aplicación Mercury del path ~/Sites/eshop-horeca-front al directorio apps/horeca

Una vez tenemos la nueva aplicación deberemos coprobar si los siguientes archivos existen en el root de la misma:
- tsconfig.json
- tailwind.config.js
- postcss.config.js
Si no existen los copiaremos de la aplicación “demo” y los añadiremos a la nueva aplicación.
Una vez esté la aplicación importada ya podremos arrancar Mercury para que use la aplicación importada y poder empezar a desarrollar en ese entorno.
yarn dev:packages --filter=horeca
Ahora ya podemos acceder a la aplicación desde el navegador. Deberemos asegurarnos que el Docker de la aplicación también esté inicializado.
Create Mercury App CLI
Una de las apps que componen a Mercury es la aplicación que se encarga de crear un nuevo proyecto de Mercury. Esta aplicación se encuentra en el directorio packages/create-mercury-app.
En caso de que queramos hacer alguna modificación en esta aplicación deberemos seguir los siguientes pasos.
1. Instalar el cli localmente
Para poder ejecutar el link apuntando a los ficheros locales precisamos instalar el cli localmente. Para ello ejecutaremos el siguiente comando:
yarn global add file:$(pwd)/packages/create-mercury-app
2. Inicializar modo desarrollador
yarn dev:packages
Si hacemos cambios en el “template” usando para crear la app, osea lo que está en la carpeta packages/create-mercury-app/template
deberemos cortar la ejecución y volver ejecutar yarn dev
para que se actualice el template.
3. Verificar instalación
Una vez realizado los pasos ya deberíamos poder ejecutar el comando create-mercury-app
desde cualquier directorio y crear una nueva aplicación de Mercury.
create-mercury-app -v
Desarrollar
Ahora que ya tenemos arrancado un entorno sobre el cual podemos probar nuestros desarrollos ya podemos empezar a implementar.
Crear rama
Crearemos una rama nueva a partir de la rama principal. Por ejemplo:
git checkout main
git pull
git checkout -b feature-nuevo_componente
Trataremos de no crear ramas que hagan referencia a tareas de otros proyectos.
Identificar paquete o paquetes donde intervenir
Como vimos anteriormente el código de Mercury lo componen los distintos paquetes que encontramos en el directorio “packages”.

- create-mercury-app
Implementa el comando de create-mercury-app para crear nuevas instalaciones de Mercury.
- eslint-config-custom
Configuraciones custom de linter.
- i18n
Implementa las traducciones de los textos de Mercury.
- model
Implementa los modelos de las entidades usadas por Mercury
- service-adobe-commerce
Implementa la capa de servicios y el proxy que sirve para conectarse a Adobe Commerce y convertir los datos a modelos de Mercury.
- theme
Implementa el tema base de Mercury, es donde se encuentran todos los componentes, hooks, contextos, páginas y estilos.
- tsconfig
Implementa configuración de Typescript.
- ui
Implementa los componentes de la Ui de Mercury.
- utils
Implementa métodos generales para user en Mercury.
Según la implementación que debamos llevar a cabo deberemos identificar en que paquete o paquetes deberemos trabajar.
Siguiendo con el ejemplo anterior, en que creamos una rama para crear un nuevo componente, deberíamos intervenir en el paquete “packages/theme”.
Publicar cambios
Una vez realizada la implementación y haberla probado la podemos publicar a Mercury para posteriormente poderla usar en el proyecto o los proyectos para el cual hemos requerido la funcionalidad. Por ejemplo:
git add .
git commit -m 'Creación de nuvo componente'
git push
Importante que antes de mandar los cambios nos aseguremos de haber cambiado la versión en el package.json de los paquetes en los que haymos intervenido.
Tras subir los cambios y haberlos “mergeado” a la rama principal de Mercury, ya podemos actualizar Mercury en el proyecto donde queremos añadir la nueva funcionalidad. Por ejemplo:
cd ~/Sites/eshop-horeca-front/
yarn upgrade-packages
Esto actualizará las versiones en el archivo yarn.lock del proyecto y tras comprobar que la modificación funciona ya podemos publicar los cambios al repositorio del proyecto.
Documentar
La documentación de Mercury se encuentra en apps/docs, se trata de una apliación hecha en Astro.
Inicializar documentación
Para inicialiar solo la aplicación de la documentación de Mercury podemos ejectuar el siguiente comando:
yarn workspace @mercury/docs dev
Tendremos la documentación accesible en http://127.0.0.1:3000/ y podremos ir visualizando ahí nuestros cambios.
Crear opciones de menú
Para añadir una opción en el menú lateral editaremos el objeto “Sidebar”:
...
export const SIDEBAR: Sidebar = {
es: [
{
text: 'Introducción',
link: '/es/introduccion'
},
{
text: 'Básico',
children: [
{ text: '¿Cómo funciona?', link: '/es/basico-como-funciona' },
{ text: 'Desarrollar con Mercury', link: '/es/desarrollar-con-mercury' },
{ text: 'Contribuir en Mercury', link: '/es/contribuir-en-mercury' },
{ text: 'Crear una aplicación Mercury', link: '/es/crear-una-aplicacion' }
]
},
{
text: 'Framework',
children: [
{ text: 'Theming', link: '/es/framework/theming' },
{ text: 'Páginas', link: '/es/framework/paginas' },
{ text: 'Componentes', link: '/es/framework/componentes' },
{ text: 'Service Layer', link: '/es/framework/services' }
]
},
{
text: 'Integraciones',
children: [
{
text: 'Adobe Commerce',
children: [
{ text: 'Configuración Base', link: '/es/integraciones/adobe-commerce/configuracion-base' },
{ text: 'Module Api', link: '/es/integraciones/adobe-commerce/module-api' },
{ text: 'Module Cache', link: '/es/integraciones/adobe-commerce/module-cache' },
{ text: 'Module Redirects', link: '/es/integraciones/adobe-commerce/module-redirects' }
]
}
]
}
]
}
...
Como vemos el objeto “Sidebar” podemos definir secciones y opciones. Cada opción tiene un “text” con el label de la opción y un “link” con el path del archivo al que enlaza.
Crear página de contenido
Una vez tenemos la opción creada debemos crear la página a la cual enlaza. Por ejemplo:
---
title: Nueva página de ejemplo
description: Nueva página de ejemplo para la documentación de Mercury.
---
## Sección 1
Introducción a la página de ejemplo, podemos usar markdown o HTML.
## Sección 2
Los titulares con ## delante aparece enlazados en la navegación lateral derecha.
### NodeJS
Los titulares sin ## aparecen como titulares, pero no en la navegación lateral derecha.
También podemos usar imagenes tanto en HTML como en Markdown.
Las imágenes deberán estar en el directorio **apps/docs/public**
<img src="/img/imagen-ejemplo.png" width="260" alt="Imagen de ejemplo."/>