typescript - Como implantar aplicativo Angular 9 universal com funções do Firebase
Recentemente atualizei para a versão mais recente do Angular 9 e criei um aplicativo. Tornei este aplicativo universal usando o comando: ng add @nguniversal/express-engine e depois construí o aplicativo usando: npm run build:ssr && npm run serve:ssr
agora a pasta dist foi criada com as pastas browser e server dentro dela, mas nenhum arquivo server.js foi criado no diretório raiz do dist e também o arquivo de configuração do webpack não foi criado quando eu construí o aplicativo com Angular 9. Por favor, me diga uma maneira de como posso implantar a build do meu novo aplicativo Angular 9 Universal no Firebase Cloud Functions e Hosting
Resposta #1
a partir do Angular 9 você terá a seguinte estrutura de build
dist
├── server
| └── main.js and some other files like firebase analytics stuff
└── browser
└── index.html and all files for the broswer
agora, para testar isso, você precisa dar o seguinte comando a partir do diretório raiz do seu projeto
node dist/server
isso vai invocar o arquivo main.js na pasta do servidor e seu aplicativo será servido localmente. informações serão exibidas na tela sobre a URL do localhost com a porta.
agora, para implantar no Firebase, use o seguinte código
import * as functions from 'firebase-functions';
import * as path from 'path';
const app = require(path.resolve(__dirname, "./dist/server/main")).app; // change the path according to your project structure
const myApp = functions.https.onRequest(app());
e você terá uma função myApp onde poderá acessar seu aplicativo Angular SSR
[ATUALIZAÇÃO]
não há um lugar fixo onde você inicializa suas funções. tudo o que importa é que o caminho de dist/server/main esteja correto na função myApp
mais uma coisa que eu esqueci de mencionar é que você precisa atualizar o campo hosting do seu package.json para a seguinte configuração =>
...
"hosting": [{
"target": "app",
"public": "/dist/browser", // change it according to your directory structure
"rewrites": [{
"source": "**",
"function": "myApp"
}]
}]
...
espero que ajude ;)
