

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Modificar la configuración de compilación de monorepo
<a name="monorepo-configuration"></a>

Cuando se almacenan varios proyectos o microservicios en un único repositorio, se denomina monorepo. Puede utilizar Amplify Hosting para implementar aplicaciones en un monorepo sin crear múltiples configuraciones de compilación o configuraciones de ramificación.

Amplify admite aplicaciones en monorepos genéricos, así como aplicaciones en monorepos creadas con npm workspace, pnpm workspace, Yarn workspace, Nx y Turborepo. Al implementar su aplicación, Amplify detecta automáticamente la herramienta de compilación de monorepo que está utilizando. Amplify aplica automáticamente la configuración de compilación a las aplicaciones en un npm workspace, Yarn workspace o Nx. Las aplicaciones Turborepo y pnpm requieren una configuración adicional. Para obtener más información, consulte [Configuración de aplicaciones Turborepo y pnpm monorepo](#turborepo-pnpm-monorepo-configuration).

Puede guardar la configuración de compilación de un monorepo en la consola de Amplify o descargar el archivo de `amplify.yml` y añadirlo a la raíz de su repositorio. Amplify aplica la configuración guardada en la consola a todas tus ramificaciones, a menos que encuentre un archivo de `amplify.yml` en su repositorio. Cuando hay un archivo de `amplify.yml`, su configuración anula cualquier configuración de compilación guardada en la consola de Amplify.

## Referencia de la especificación de compilación de la sintaxis de YAML para monorepo
<a name="monorepo-yml-syntax"></a>

La sintaxis de YAML de una especificación de compilación de monorepo es diferente de la sintaxis de YAML de un repositorio que contiene una sola aplicación. En el caso de un monorepo, se declara cada proyecto en una lista de aplicaciones. Debe proporcionar la siguiente clave `appRoot` adicional para cada aplicación que declare en la especificación de compilación de monorepo:

**appRoot**  
La raíz, dentro del repositorio, en la que se inicia la aplicación. Esta clave debe existir y tener el mismo valor que la variable de entorno `AMPLIFY_MONOREPO_APP_ROOT`. Para obtener instrucciones sobre cómo configurar esta variable de entorno, consulte[Configuración de la variable de entorno AMPLIFY\$1MONOREPO\$1APP\$1ROOT](#setting-monorepo-environment-variable).

En el siguiente ejemplo de especificación de compilación de monorepo se muestra cómo declarar varias aplicaciones de Amplify en el mismo repositorio. Las dos aplicaciones, `react-app` y `angular-app`, se declaran en la lista `applications`. La clave `appRoot` de cada aplicación indica que la aplicación se encuentra en la carpeta raíz `apps` del repositorio.

El atributo `buildpath` se configura en `/` para ejecutar y compilar la aplicación desde la raíz del proyecto monorepo. El atributo `baseDirectory` es la ruta relativa de `buildpath`.

### Sintaxis de YAML de especificación de compilación de monorepo
<a name="monorepo-build-yaml-syntax"></a>

```
version: 1
applications:
  - appRoot: apps/react-app
    env:
      variables:
        key: value
    backend:
      phases:
        preBuild:
          commands:
            - *enter command*
        build:
          commands:
            - *enter command*
        postBuild:
            commands:
            - *enter command*
    frontend:
      buildPath: / # Run install and build from the monorepo project root
      phases:
        preBuild:
          commands:
            - *enter command*
            - *enter command*
        build:
          commands:
            - *enter command*
      artifacts:
        files:
            - location
            - location
        discard-paths: yes
        baseDirectory: location
      cache:
        paths:
            - path
            - path
    test:
      phases:
        preTest:
          commands:
            - *enter command*
        test:
          commands:
            - *enter command*
        postTest:
          commands:
            - *enter command*
      artifacts:
        files:
            - location
            - location
        configFilePath: *location*
        baseDirectory: *location*
  - appRoot: apps/angular-app
    env:
      variables:
        key: value
    backend:
      phases:
        preBuild:
          commands:
            - *enter command*
        build:
          commands:
            - *enter command*
        postBuild:
            commands:
            - *enter command*
    frontend:
      phases:
        preBuild:
          commands:
            - *enter command*
            - *enter command*
        build:
          commands:
            - *enter command*
      artifacts:
        files:
            - location
            - location
        discard-paths: yes
        baseDirectory: location
      cache:
        paths:
            - path
            - path
    test:
      phases:
        preTest:
          commands:
            - *enter command*
        test:
          commands:
            - *enter command*
        postTest:
          commands:
            - *enter command*
      artifacts:
        files:
            - location
            - location
        configFilePath: *location*
        baseDirectory: *location*
```

Una aplicación que utilice el siguiente ejemplo de especificación de compilación se compilará en la raíz del proyecto y los artefactos de compilación se ubicarán en `/packages/nextjs-app/.next`.

```
applications:
  - frontend:
      buildPath: '/'  # run install and build from monorepo project root
      phases:
        preBuild:
          commands:
            - npm install
        build:
          commands:
            - npm run build --workspace=nextjs-app
      artifacts:
        baseDirectory: packages/nextjs-app/.next
        files:
          - '**/*'
      cache:
        paths:
          - node_modules/**/*
    appRoot: packages/nextjs-app
```

## Configuración de la variable de entorno AMPLIFY\$1MONOREPO\$1APP\$1ROOT
<a name="setting-monorepo-environment-variable"></a>

Al implementar una aplicación almacenada en un monorepo, la variable de entorno `AMPLIFY_MONOREPO_APP_ROOT` de la aplicación debe tener el mismo valor que la ruta de la raíz de la aplicación, en relación con la raíz de su repositorio. Por ejemplo, un monorepo denominado `ExampleMonorepo` con una carpeta raíz denominada `apps`, que contenga `app1`, `app2` y `app3`, tiene la siguiente estructura de directorios:

```
ExampleMonorepo
  apps
    app1
    app2
    app3
```

En este ejemplo, el valor de la variable de entorno `AMPLIFY_MONOREPO_APP_ROOT` para `app1` es `apps/app1`.

Al implementar una aplicación monorepo mediante la consola de Amplify, la consola establece automáticamente la variable de entorno `AMPLIFY_MONOREPO_APP_ROOT` con el valor que especifique para la ruta a la raíz de la aplicación. Sin embargo, si su aplicación monorepo ya existe en Amplify o se implementa utilizando AWS CloudFormation, debe configurar manualmente la variable de entorno en la sección **Variables de `AMPLIFY_MONOREPO_APP_ROOT` entorno de la consola** de Amplify.

### Configuración automática de la variable de entorno AMPLIFY\$1MONOREPO\$1APP\$1ROOT durante la implementación
<a name="setting-monorepo-environmnet-variable-automatically"></a>

Las siguientes instrucciones muestran cómo implementar una aplicación monorepo con la consola de Amplify. Amplify establece automáticamente la variable de entorno `AMPLIFY_MONOREPO_APP_ROOT` mediante la carpeta raíz de la aplicación que especifique en la consola.

**Para implementar una aplicación monorepo con la consola de Amplify**

1. Inicia sesión en la consola de [Amplify Consola de administración de AWS](https://console.aws.amazon.com/amplify/) y ábrela.

1. Elija **Crear nueva aplicación** en la esquina superior derecha.

1. En la página **Comenzar a crear con Amplify**, seleccione el proveedor de Git y, a continuación, elija **Siguiente**.

1. En la página **Añadir ramificación de repositorio**, haga lo siguiente:

   1. Elija el nombre del repositorio de la lista.

   1. Elija el nombre de la ramificación que desea usar.

   1. Seleccione **Mi aplicación es un monorepo**

   1. Introduzca la ruta a su aplicación en su monorepo, por ejemplo, **apps/app1**.

   1. Elija **Siguiente**.

1. En la página de **Configuración de la aplicación**, puede utilizar la configuración predeterminada o personalizar la configuración de compilación de su aplicación. En la sección **Variables de entorno**, Amplify establece `AMPLIFY_MONOREPO_APP_ROOT` en la ruta que se especificó en el paso 4d.

1. Elija **Siguiente**.

1. En la página **Revisar**, elija **Guardar e implementar**.

### Configuración de la variable de entorno AMPLIFY\$1MONOREPO\$1APP\$1ROOT para una aplicación existente
<a name="setting-monorepo-environment-variable-manually"></a>

Siga las siguientes instrucciones para configurar manualmente la variable de `AMPLIFY_MONOREPO_APP_ROOT` entorno de una aplicación que ya esté implementada en Amplify o que se haya creado con ella. CloudFormation

**Para configurar la variable de entorno AMPLIFY\$1MONOREPO\$1APP\$1ROOT para una aplicación existente**

1. Inicia sesión en la consola de [Amplify Consola de administración de AWS](https://console.aws.amazon.com/amplify/) y ábrela.

1. Elija el nombre de la aplicación para la que desea establecer la variable de entorno.

1. En el panel de navegación, elija **Alojamiento** y, a continuación, **Variables de entorno**.

1. En **Variables de entorno**, elija **Administrar variables**.

1. En la sección **Gestionar variables**, haga lo siguiente:

   1. Elija **Add new (Añadir nuevo)**.

   1. En **Variable**, introduzca la clave `AMPLIFY_MONOREPO_APP_ROOT`.

   1. En **Valor**, introduzca la ruta a la aplicación, por ejemplo **apps/app1**.

   1. En **Ramificación**, Amplify aplica de forma predeterminada la variable de entorno a todas las ramificaciones.

1. Elija **Guardar**.

## Configuración de aplicaciones Turborepo y pnpm monorepo
<a name="turborepo-pnpm-monorepo-configuration"></a>

Las herramientas de compilación Turborepo y pnpm workspace monorepo obtienen información de configuración de los archivos `.npmrc`. Al implementar una aplicación monorepo creada con una de estas herramientas, debe tener un archivo `.npmrc` en el directorio raíz del proyecto.

En el archivo `.npmrc`, configure el enlazador para la instalación de los paquetes de Node en `hoisted`. Puede copiar la siguiente línea en su archivo.

```
node-linker=hoisted
```

*Para obtener más información sobre los archivos `.npmrc` y la configuración, consulte [pnpm .npmrc](https://pnpm.io/next/npmrc) en la documentación de pnpm*.

Pnpm no se incluye en el contenedor de compilación predeterminado de Amplify. En el caso de las aplicaciones pnpm workspace y Turborepo, debe añadir un comando para instalar pnpm en la fase `preBuild` de configuración de compilación de la aplicación.

El siguiente extracto de ejemplo de una especificación de compilación muestra una fase `preBuild` con un comando para instalar pnpm.

```
version: 1
applications:
  - frontend:
      phases:
        preBuild:
          commands:
            - npm install -g pnpm
```