Com alguma configuração adicional, você pode desenvolver a funcionalidade CLI básica com reconhecimento de estrutura para estender o suporte de integração a estruturas diferentes de Angular e Next.js.
Antes de você começar
Antes de começar a implantar seu aplicativo no Firebase, revise os seguintes requisitos e opções:
- CLI do Firebase versão 12.1.0 ou posterior. Certifique-se de instalar a CLI usando seu método preferido.
- Opcional: faturamento ativado no seu projeto do Firebase (obrigatório se você planeja usar SSR)
Inicializar Firebase
Para começar, inicialize o Firebase para seu projeto de estrutura. Use a Firebase CLI para um novo projeto ou modifique firebase.json
para um projeto existente.
Inicialize um novo projeto
- Na CLI do Firebase, ative a visualização de estruturas da web:
firebase experiments:enable webframeworks
Execute o comando de inicialização na CLI e siga as instruções:
firebase init hosting
Responda sim para "Deseja usar um framework web? (experimental)"
Escolha o diretório de origem da hospedagem; este poderia ser um aplicativo da web existente.
Se solicitado, escolha Express.js/custom
Inicializar um projeto existente
Altere sua configuração de hospedagem em firebase.json
para ter uma opção source
, em vez de uma opção public
. Por exemplo:
{
"hosting": {
"source": "./path-to-your-express-directory"
}
}
Servir conteúdo estático
Antes de implantar conteúdo estático, você precisará configurar seu aplicativo.
Configurar
Para saber como implantar seu aplicativo, a CLI do Firebase precisa ser capaz de construir seu aplicativo e saber onde suas ferramentas colocam os ativos destinados à hospedagem. Isso é feito com o script de construção npm e a diretiva de diretórios CJS em package.json
.
Dado o seguinte package.json:
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack",
"static": "cp static/* dist",
"prerender": "ts-node prerender.ts"
},
…
}
A CLI do Firebase chama apenas seu script de build, portanto, você precisará garantir que seu script de build seja completo.
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack && npm run static && npm run prerender",
"static": "cp static/* dist",
"prerender": "ts-node prerender.ts"
},
…
}
Se sua estrutura não oferece suporte à pré-renderização pronta para uso, considere usar uma ferramenta como Rendertron . O Rendertron permitirá que você faça solicitações headless do Chrome em uma instância local do seu aplicativo, para que você possa salvar o HTML resultante para ser veiculado na hospedagem.
Finalmente, diferentes frameworks e ferramentas de construção armazenam seus artefatos em locais diferentes. Use directories.serve
para informar à CLI onde seu script de construção está gerando os artefatos resultantes:
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack && npm run static && npm run prerender",
"static": "cp static/* dist",
"prerender": "ts-node prerender.ts"
},
"directories": {
"serve": "dist"
},
…
}
Implantar
Depois de configurar seu aplicativo, você poderá fornecer conteúdo estático com o comando de implantação padrão:
firebase deploy
Servir conteúdo dinâmico
Para veicular seu aplicativo Express no Cloud Functions para Firebase, certifique-se de que seu aplicativo Express (ou manipulador de URL de estilo expresso) seja exportado de forma que o Firebase possa encontrá-lo depois que sua biblioteca for compactada com npm.
Para fazer isso, certifique-se de que sua diretiva files
inclua tudo o que é necessário para o servidor e que seu ponto de entrada principal esteja configurado corretamente em package.json
:
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack && npm run static && npm run prerender",
"static": "cp static/* dist",
"prerender": "ts-node tools/prerender.ts"
},
"directories": {
"serve": "dist"
},
"files": ["dist", "server.js"],
"main": "server.js",
...
}
Exporte seu aplicativo expresso de uma função chamada app
:
// server.js
export function app() {
const server = express();
…
return server;
}
Ou se você preferir exportar um manipulador de URL de estilo expresso, nomeie-o handle
:
export function handle(req, res) {
res.send(‘hello world’);
}
Implantar
firebase deploy
Isso implanta seu conteúdo estático no Firebase Hosting e permite que o Firebase retorne ao seu aplicativo Express hospedado no Cloud Functions for Firebase.
Opcional: integre com o Firebase Authentication
As ferramentas de implantação do Firebase com reconhecimento de estrutura da web manterão automaticamente o estado do cliente e do servidor sincronizados usando cookies. Para acessar o contexto de autenticação, o objeto Express res.locals
contém opcionalmente uma instância autenticada do aplicativo Firebase ( firebaseApp
) e o usuário atualmente conectado ( currentUser
).