

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Definição de configurações de compilação monorepo
<a name="monorepo-configuration"></a>

Quando você armazena vários projetos ou microsserviços em um único repositório, isso é chamado de monorepo. É possível usar o Amplify Hosting para implantar aplicativos em um monorepo sem criar várias configurações de compilação ou configurações de ramificação.

O Amplify suporta aplicativos em monorepos genéricos, bem como aplicativos em monorepos criados usando npm workspace, pnpm workspace, Yarn workspace, Nx e Turborepo. Quando você implanta seu aplicativo, o Amplify detecta automaticamente a ferramenta de compilação monorepo que você está usando. O Amplify aplica automaticamente as configurações da compilação para aplicativos em um espaço de trabalho npm, espaço de trabalho Yarn ou Nx. Os aplicativos Turborepo e pnpm requerem configuração adicional. Para obter mais informações, consulte [Configurar aplicativos Turborepo e pnpm monorepo](#turborepo-pnpm-monorepo-configuration).

É possível salvar as configurações de compilação de um monorepo no console do Amplify ou baixar o arquivo `amplify.yml` e adicioná-lo à raiz do seu repositório. O Amplify aplica as configurações salvas no console a todas as suas ramificações, a menos que encontre um arquivo `amplify.yml` no seu repositório. Quando um arquivo `amplify.yml` está presente, suas configurações substituem todas as configurações de compilação salvas no console do Amplify.

## Referência de sintaxe do YAML da especificação de compilação monorepo
<a name="monorepo-yml-syntax"></a>

A sintaxe YAML para uma especificação de compilação monorepo é diferente da sintaxe YAML para um repositório que contém um único aplicativo. Para um monorepo, você declara cada projeto em uma lista de aplicativos. É necessário fornecer a seguinte chave adicional `appRoot` para cada aplicativo declarado na especificação de compilação do monorepo:

**appRoot**  
A raiz, dentro do repositório, na qual o aplicativo é iniciado. Essa chave deve existir e ter o mesmo valor da variável de ambiente `AMPLIFY_MONOREPO_APP_ROOT`. Para obter instruções sobre como definir essa variável de ambiente, consulte [Definindo a variável de ambiente AMPLIFY\$1MONOREPO\$1APP\$1ROOT](#setting-monorepo-environment-variable).

O exemplo de especificação de compilação do monorepo a seguir demonstra como declarar vários aplicativos Amplify no mesmo repositório. Os dois aplicativos, `react-app` e `angular-app` estão declarados na lista `applications`. A chave `appRoot` de cada aplicativo indica que o aplicativo está localizado na pasta raiz `apps` do repositório.

O atributo `buildpath` está definido como `/` para executar e criar o aplicativo a partir da raiz do projeto monorepo. O atributo `baseDirectory` é o caminho relativo de `buildpath`.

### Sintaxe YAML da especificação de compilação do 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*
```

Uma aplicação usando o exemplo de especificação de compilação a seguir será criada sob a raiz do projeto e os artefatos de construção estarão localizados em `/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
```

## Definindo a variável de ambiente AMPLIFY\$1MONOREPO\$1APP\$1ROOT
<a name="setting-monorepo-environment-variable"></a>

Quando você implanta um aplicativo armazenado em um monorepo, a variável de ambiente `AMPLIFY_MONOREPO_APP_ROOT` do aplicativo deve ter o mesmo valor do caminho da raiz do aplicativo, em relação à raiz do seu repositório. Por exemplo, um monorepo nomeado `ExampleMonorepo` com uma pasta raiz chamada `apps`, que contém `app1`, `app2` e `app3` tem a seguinte estrutura de diretórios:

```
ExampleMonorepo
  apps
    app1
    app2
    app3
```

Neste exemplo, o valor da variável de ambiente `AMPLIFY_MONOREPO_APP_ROOT` para `app1` é `apps/app1`.

Quando você implanta um aplicativo monorepo usando o console do Amplify, o console define automaticamente a variável de ambiente `AMPLIFY_MONOREPO_APP_ROOT` usando o valor que você especifica para o caminho até a raiz do aplicativo. No entanto, se seu aplicativo monorepo já existe no Amplify ou é implantado usando AWS CloudFormation, você deve definir manualmente a variável de ambiente na **seção** Variáveis de `AMPLIFY_MONOREPO_APP_ROOT` ambiente no console do Amplify.

### Configurar a variável de ambiente AMPLIFY\$1MONOREPO\$1APP\$1ROOT automaticamente durante a implantação
<a name="setting-monorepo-environmnet-variable-automatically"></a>

As instruções a seguir demonstram como implantar um aplicativo monorepo com o console do Amplify. Amplify define automaticamente a variável de ambiente `AMPLIFY_MONOREPO_APP_ROOT` e usando a pasta raiz do aplicativo que você especifica no console.

**Para implantar um aplicativo monorepo com o console do Amplify**

1. Faça login no Console de gerenciamento da AWS e abra o console do [Amplify](https://console.aws.amazon.com/amplify/).

1. Escolha **Criar nova aplicação** no canto superior direito.

1. Na página **Comece a desenvolver com o Amplify**, escolha seu provedor de Git e escolha **Avançar**.

1. Na página **Adicionar ramificação do repositório**, faça o seguinte:

   1. Escolha o nome do seu repositório na lista.

   1. Escolha o nome da ramificação a ser usada.

   1. Selecione **Minha aplicação é um monorepo**

   1. Insira o caminho para seu aplicativo em seu monorepo, por exemplo, **apps/app1**.

   1. Escolha **Próximo**.

1. Na página **Configurações da aplicação**, é possível usar as configurações padrão ou personalizar as configurações de compilação da sua aplicação. Na seção **Variáveis de ambiente**, o Amplify define `AMPLIFY_MONOREPO_APP_ROOT` no caminho que você especificou na etapa 4d.

1. Escolha **Próximo**.

1. Na página **Revisar**, escolha **Salvar e implantar**.

### Configurar a variável de ambiente AMPLIFY\$1MONOREPO\$1APP\$1ROOT para um aplicativo existente
<a name="setting-monorepo-environment-variable-manually"></a>

Use as instruções a seguir para definir manualmente a variável de `AMPLIFY_MONOREPO_APP_ROOT` ambiente para um aplicativo que já está implantado no Amplify ou foi criado usando. CloudFormation

**Para definir a variável de ambiente AMPLIFY\$1MONOREPO\$1APP\$1ROOT para um aplicativo existente**

1. Faça login no Console de gerenciamento da AWS e abra o console do [Amplify](https://console.aws.amazon.com/amplify/).

1. Escolha o nome do aplicativo para o qual definir a variável de ambiente.

1. No painel de navegação, escolha **Hospedagem**, e, em seguida, **Variáveis de ambiente**.

1. Na página **Variáveis de ambiente**, selecione **Gerenciar variáveis de ambiente**.

1. Na seção **Gerenciador de variáveis**, faça o seguinte:

   1. Selecione **Add new (Adicionar novo)**.

   1. Em **Variável**, insira a chave `AMPLIFY_MONOREPO_APP_ROOT`.

   1. Em **Valor**, insira o caminho para o aplicativo, por exemplo **apps/app1**.

   1. Para **Ramificação**, por padrão, o Amplify aplica a variável de ambiente a todas as ramificações.

1. Escolha **Salvar**.

## Configurar aplicativos Turborepo e pnpm monorepo
<a name="turborepo-pnpm-monorepo-configuration"></a>

As ferramentas de construção do Turborepo e pnpm workspace monorepo obtêm informações de configuração dos arquivos `.npmrc`. Ao implantar um aplicativo monorepo criado com uma dessas ferramentas, é necessário ter um arquivo `.npmrc` no diretório raiz do projeto.

No arquivo `.npmrc`, defina o vinculador para instalar os pacotes do Node em `hoisted`. Você tem as seguintes opções para fazer o seguinte:

```
node-linker=hoisted
```

Para obter mais informações sobre arquivos `.npmrc` e configurações, consulte [pnpm .npmrc](https://pnpm.io/next/npmrc) na *documentação do pnpm.*

O Pnpm não está incluído no contêiner de compilação padrão do Amplify. Para os aplicativos pnpm workspace e Turborepo, é necessário adicionar um comando para instalar o pnpm na fase `preBuild` das configurações de compilação do seu aplicativo.

O exemplo a seguir, trecho de uma especificação de compilação mostra uma fase `preBuild` com um comando para instalar o pnpm.

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