Compartilhar recursos do projeto em vários sites

Você pode configurar um ou mais sites Firebase Hosting em um único projeto do Firebase. Como todos os sites estão no mesmo projeto, eles podem acessar os outros recursos do Firebase do projeto.

Ao definir vários sites do Hosting no mesmo projeto do Firebase, você facilita o compartilhamento dos recursos dele entre sites e aplicativos relacionados. Por exemplo, se você configurar seu blog, painel de administração e app público como sites individuais no mesmo projeto, todos eles poderão compartilhar o mesmo banco de dados de usuários do Firebase Authentication, além de ter os próprios domínios ou conteúdo.

Etapa 1: atualizar a versão da CLI Firebase

Acesse os recursos mais recentes do Firebase Hosting ao atualizar para a versão mais recente da CLI Firebase.

Etapa 2: adicionar outros sites

Adicione outros sites a um projeto do Firebase usando um dos seguintes métodos:

  • Use o fluxo de trabalho na página Hosting do console Firebase.

  • Use o comando da CLI Firebase: firebase hosting:sites:create SITE_ID

  • Use a API REST Hosting: projects.sites.create

Para cada um desses métodos, você especificará um SITE_ID usado para construir os subdomínios padrão provisionados pelo Firebase para o site:

  • SITE_ID.web.app
  • SITE_ID.firebaseapp.com

Como o SITE_ID é usada para esses URLs, o ID do site tem os seguintes requisitos:

  • Precisa ser um rótulo de nome de host válido, o que significa que não pode conter ., _ etc.
  • Precisa ter 30 caracteres ou menos.
  • Precisa ser globalmente exclusivo no Firebase.

Para cada site, também é possível adicionar domínios personalizados para exibir o mesmo conteúdo e configuração em vários URLs.

Excluir um site secundário

Exclua sites indesejados de um projeto do Firebase usando um dos seguintes métodos:

  • Use o fluxo de trabalho na página Hosting do console Firebase.

  • Use o comando da CLI Firebase: firebase hosting:sites:delete SITE_ID

  • Use a API REST Hosting: projects.sites.delete

Não é possível excluir o site padrão, que tem o mesmo SITE_ID que o ID do projeto do Firebase.

Etapa 3: configurar destinos de implantação para seus sites

Quando você tem vários sites e executa os comandos de implantação da CLI do Firebase, a interface da linha de comando precisa saber como informar quais configurações precisam ser implantadas em cada site. Com os destinos de implantação é possível identificar de forma exclusiva um site específico com um TARGET_NAME no seu firebase.json arquivo de configuração e comandos da CLI do Firebase para testar ou implantar sites.

Para criar um destino de implantação e aplicar um TARGET_NAME a um site do Hosting, execute o seguinte comando da CLI usando a raiz do diretório do seu projeto:

firebase target:apply hosting TARGET_NAME RESOURCE_IDENTIFIER

Em que os parâmetros são:

  • TARGET_NAME: um nome exclusivo (definido por você) para o site do Hosting em que as implantações serão realizadas

  • RESOURCE_IDENTIFIER: o SITE_ID do site do Hosting conforme listado no seu projeto do Firebase

Por exemplo, se você criou dois sites (myapp-blog e myapp-app) no seu projeto do Firebase, você pode aplicar um TARGET_NAME exclusivo (blog e app, respectivamente) para cada site executando os seguintes comandos:

firebase target:apply hosting blog myapp-blog
firebase target:apply hosting app myapp-app

As configurações dos destinos de implantação são armazenadas no arquivo .firebaserc no diretório do projeto. Portanto, você só precisa configurar os destinos de implantação uma vez por projeto.

Etapa 4: definir a configuração de hospedagem para cada site

Use TARGET_NAME aplicado a um site ao definir a configuração de hospedagem no arquivo firebase.json.

  • Se o arquivo firebase.json definir a configuração de vários sites, use um formato de matriz:

    {
      "hosting": [ {
          "target": "blog",  // "blog" is the applied TARGET_NAME for the Hosting site "myapp-blog"
          "public": "blog/dist",  // contents of this folder are deployed to the site "myapp-blog"
    
          // ...
        },
        {
          "target": "app",  // "app" is the applied TARGET_NAME for the Hosting site "myapp-app"
          "public": "app/dist",  // contents of this folder are deployed to the site "myapp-app"
    
          // ...
    
          "rewrites": [...]  // You can define specific Hosting configurations for each site
        }
      ]
    }
  • Se o arquivo firebase.json definir a configuração de apenas um site, não será necessário usar um formato de matriz:

    {
      "hosting": {
          "target": "blog",
          "public": "dist",
    
          // ...
    
          "rewrites": [...]
      }
    }

Etapa 5: testar localmente, visualizar alterações e implantar nos seus sites

Execute qualquer um dos seguintes comandos da raiz do diretório local do seu projeto.

Comando Descrição
firebase emulators:start --only hosting Emula o conteúdo e a configuração do Hosting do site do Hosting padrão em um URL hospedado localmente
firebase emulators:start --only hosting:TARGET_NAME Emula o conteúdo e a configuração do Hosting do site do Hosting especificado em um URL hospedado localmente
firebase hosting:channel:deploy \
CHANNEL_ID
Implanta o conteúdo e a configuração do Hosting do site Hosting do padrão em um URL de visualização
firebase hosting:channel:deploy \
CHANNEL_ID --only TARGET_NAME
Implanta o conteúdo e a configuração do Hosting do site do Hosting especificado em um URL de visualização
firebase deploy --only hosting Implanta o conteúdo e a configuração do Hosting no canal ativo de todos os sites Hosting configurados em firebase.json
firebase deploy --only hosting:TARGET_NAME Implanta o conteúdo e a configuração do Hosting no canal ativo do site Hosting especificado
Comando Descrição
(não recomendado; use emulators:start)
firebase serve --only hosting
Veicula o conteúdo e a configuração do Hosting do site do Hosting padrão em um URL hospedado localmente
(não recomendado; use emulators:start)
firebase serve --only hosting:TARGET_NAME
Exibe o conteúdo e a configuração do Hosting do site do Hosting especificado em um URL hospedado localmente