Configuração da implantação

Arquivo firebase.json

O comando firebase init cria um arquivo de configurações firebase.json na raiz do diretório do seu projeto. Esse arquivo obrigatório é usado para definir os arquivos que serão publicados na implantação. A configuração do Firebase Hosting no firebase.json será semelhante a esta:

{
  "hosting": {
    "public": "app",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}

Propriedades padrão

As propriedades padrão public e ignore são descritas detalhadamente a seguir.

public

"public": "app"

Obrigatório: com a configuração public, você informa ao comando firebase qual diretório será carregado no Firebase Hosting. Esse diretório precisa existir dentro do diretório do projeto, e o valor padrão dele será "public".

ignore

"ignore": [
  "firebase.json",
  "**/.*",
  "**/node_modules/**"
]

Opcional: a configuração ignore é um parâmetro opcional que especifica os arquivos que serão ignorados na implantação. Ela usa as definições glob da mesma forma que o GIT processa o .gitignore.

Propriedades avançadas

O arquivo firebase.json tem alguns outros parâmetros opcionais para a configuração do Hosting. Veja o arquivo firebase.json de configuração completa do Hosting. Os parâmetros opcionais são explicados detalhadamente a seguir:

redirects

"redirects": [ {
  "source" : "/foo",
  "destination" : "/bar",
  "type" : 301
}, {
  "source" : "/firebase/*",
  "destination" : "https://www.firebase.com",
  "type" : 302
} ]

Opcional: a configuração redirects é um parâmetro opcional que contém uma matriz de regras de redirecionamento. Cada regra precisa especificar source, destination e type.

No início de cada solicitação, antes de determinar se um arquivo ou uma pasta existe em um caminho do URL, todos os caminhos são verificados para determinar se correspondem ao parâmetro source, que é um padrão glob. Em caso de correspondência, uma resposta de redirecionamento HTTP é definida com o cabeçalho "Location" configurado para a string destination estática, que pode ser um caminho relativo ou um URL absoluto.

Por fim, o parâmetro type representa o código específico da resposta HTTP obtida, podendo ser 301 para "movido permanentemente" ou 302 para "encontrado" (redirecionamento temporário).

Capturar redirecionamentos

Às vezes, pode ser útil capturar partes do URL de origem de um redirecionamento e reutilizá-las no destino. Isso é possível usando um prefixo : para identificar o segmento e um * opcional após o nome para indicar que o restante do URL precisa ser capturado:

"redirects": [ {
  "source": "/blog/:post*",
  "destination": "https://blog.myapp.com/:post*",
  "type": 301
},
{
  "source": "/users/:id/profile",
  "destination": "/users/:id/newProfile",
  "type": 301
} ]

rewrites

"rewrites": [ {
  "source": "**",
  "destination": "/index.html"
} ]

Opcional: a configuração rewrites é um parâmetro opcional que contém uma matriz de regras de substituição de URL. Assim como os redirecionamentos acima, cada regra de substituição precisa ter um padrão glob source e um destination local (que deve existir e ser um arquivo). Uma regra de substituição será aplicada apenas se um arquivo ou uma pasta não existir na origem especificada e retornar o conteúdo real do arquivo no destino, em vez de um redirecionamento HTTP.

No exemplo acima, qualquer URL é substituído pelo conteúdo do /index.html quando um arquivo de upload não existe. Isso é útil para apps que usam pushState HTML5.

headers

"headers": [ {
  "source" : "**/*.@(eot|otf|ttf|ttc|woff|font.css)",
  "headers" : [ {
    "key" : "Access-Control-Allow-Origin",
    "value" : "*"
  } ]
}, {
  "source" : "**/*.@(jpg|jpeg|gif|png)",
  "headers" : [ {
    "key" : "Cache-Control",
    "value" : "max-age=7200"
  } ]
}, {
  // Sets the cache header for 404 pages to cache for 5 minutes
  "source" : "404.html",
  "headers" : [ {
    "key" : "Cache-Control",
    "value" : "max-age=300"
  } ]
} ]

Opcional: a configuração headers é um parâmetro opcional que contém uma matriz de definições de cabeçalho personalizadas. Cada definição precisa ter uma chave source que corresponda ao caminho da solicitação original, independentemente de qualquer regra de substituição que use a notação glob. Cada definição também precisa ter uma matriz de headers para aplicação, cada um com uma key e um value.

O exemplo acima especifica um cabeçalho CORS para todos os arquivos de fontes e modifica o cache do navegador padrão de uma hora por um cache de duas horas para arquivos de imagem.

Os seguintes cabeçalhos não podem ser definidos com a configuração de headers:

  • Strict-Transport-Security
  • Public-Key-Pinning
  • Set-Cookie

cleanUrls

"cleanUrls": true

Opcional: a configuração cleanUrls é um parâmetro opcional. Quando definida como true, ela remove automaticamente a extensão .html dos URLs do arquivo de upload. Se uma extensão .html for adicionada, um redirecionamento 301 será executado para o mesmo caminho sem a extensão .html.

trailingSlash

"trailingSlash": false

Opcional: a configuração trailingSlash é um parâmetro opcional. Com ela, você controla se os URLs precisam ter barras no final. Quando definida como true, os URLs são redirecionados para adicionar uma barra. Quando ela é false, a barra no final é removida. Quando não houver especificação, as barras no final serão usadas somente para os arquivos de índice de diretório (por exemplo, about/index.html).

Correspondência de padrões glob

Nas definições firebase.json detalhadas acima, a notação de correspondência do padrão glob com extglob é amplamente usada de forma semelhante à maneira como o Git processa as regras .gitignore e o Bower processa as regras "ignore". Há uma referência mais detalhada nesta página da Wiki. Entretanto, você verá a seguir uma explicação dos exemplos acima:

  • firebase.json corresponde somente ao arquivo firebase.json na raiz do diretório público.
  • ** corresponde a qualquer arquivo ou pasta em um subdiretório arbitrário. Observe que * corresponde somente a arquivos e pastas no diretório raiz.
  • **/.* corresponde a qualquer arquivo que comece com "." (geralmente arquivos ocultos, como a pasta .git) em um subdiretório arbitrário.
  • **/node_modules/** corresponde a qualquer arquivo ou pasta em um subdiretório arbitrário de uma pasta "node_modules", que pode estar em um subdiretório arbitrário do diretório público.
  • **/*.@(jpg|jpeg|gif|png) corresponde a qualquer arquivo em um subdiretório arbitrário que termine com '.' e que tenha um destes formatos: "jpg", "jpeg", "gif" ou "png".

Exemplo de configuração completa do Hosting

{
  "hosting": {
    "public": "app",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "redirects": [ {
      "source" : "/foo",
      "destination" : "/bar",
      "type" : 301
    }, {
      "source" : "/firebase/*",
      "destination" : "https://www.firebase.com",
      "type" : 302
    } ],
    "rewrites": [ {
      "source": "/app/**",
      "destination": "/app/index.html"
    } ],
    "headers": [ {
      "source" : "**/*.@(eot|otf|ttf|ttc|woff|font.css)",
      "headers" : [ {
        "key" : "Access-Control-Allow-Origin",
        "value" : "*"
      } ]
      }, {
      "source" : "**/*.@(jpg|jpeg|gif|png)",
      "headers" : [ {
        "key" : "Cache-Control",
        "value" : "max-age=7200"
      } ]
      }, {
      "source" : "404.html",
      "headers" : [ {
        "key" : "Cache-Control",
        "value" : "max-age=300"
      } ]
    } ],
    "cleanUrls": true,
    "trailingSlash": false
  }
}

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.