Con alcune configurazioni aggiuntive, puoi basarti sulla funzionalità di base dell'interfaccia a riga di comando compatibile con i framework per estendere il supporto dell'integrazione ad altri framework oltre ad Angular e Next.js.
Prima di iniziare
Prima di iniziare a eseguire il deployment dell'app su Firebase, esamina i seguenti requisiti e opzioni:
- Firebase CLI versione 12.1.0 o successive. Assicurati di installare la CLI utilizzando il tuo metodo preferito.
- (Facoltativo) Fatturazione abilitata nel tuo progetto Firebase (obbligatorio se prevedi di utilizzare il rendering lato server)
Inizializza Firebase
Per iniziare, inizializza Firebase per il progetto del framework.
Utilizza la CLI Firebase per un nuovo progetto o modifica firebase.json
per un progetto esistente.
Inizializzare un nuovo progetto
- Nell'interfaccia a riga di comando Firebase, attiva l'anteprima dei framework web:
firebase experiments:enable webframeworks
Esegui il comando di inizializzazione dalla CLI e segui le istruzioni:
firebase init hosting
Rispondi sì alla domanda "Vuoi utilizzare un framework web? (sperimentale)"
Scegli la directory di origine dell'hosting. Potrebbe trattarsi di un'app web esistente.
Se richiesto, scegli Express.js / personalizzato.
Inizializzare un progetto esistente
Modifica la configurazione dell'hosting in firebase.json
per avere un'opzione source
anziché un'opzione public
. Ad esempio:
{
"hosting": {
"source": "./path-to-your-express-directory"
}
}
Pubblicare contenuti statici
Prima di eseguire il deployment di contenuti statici, devi configurare l'applicazione.
Configura
Per sapere come eseguire il deployment dell'applicazione, la CLI Firebase deve essere
in grado di creare l'app e sapere dove gli strumenti posizionano gli asset
destinati a Hosting. Ciò si ottiene con lo script di build npm e la direttiva delle directory CJS in package.json
.
Dato il seguente file package.json:
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack",
"static": "cp static/* dist",
"prerender": "ts-node prerender.ts"
},
…
}
L'interfaccia a riga di comando Firebase chiama solo lo script di build, quindi devi assicurarti che lo script di build sia esaustivo.
{
"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 il tuo framework non supporta il pre-rendering out-of-the-box, valuta la possibilità di utilizzare uno strumento come Rendertron. Rendertron ti consentirà di effettuare richieste di Chrome headless a un'istanza locale della tua app, in modo da poter salvare l'HTML risultante da pubblicare su Hosting.
Infine, framework e strumenti di compilazione diversi memorizzano gli artefatti in posizioni diverse. Utilizza directories.serve
per indicare all'interfaccia a riga di comando dove lo script di build genera gli artefatti risultanti:
{
"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"
},
…
}
Esegui deployment
Dopo aver configurato l'app, puoi pubblicare contenuti statici con il comando di deployment standard:
firebase deploy
Pubblicare contenuti dinamici
Per pubblicare la tua app Express su Cloud Functions for Firebase, assicurati che l'app Express (o il gestore di URL in stile Express) venga esportata in modo che Firebase possa trovarla dopo che la libreria è stata compressa con npm.
Per farlo, assicurati che la direttiva files
includa tutto
il necessario per il server e che il punto di ingresso principale sia configurato correttamente in
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",
...
}
Esporta l'app Express da una funzione denominata app
:
// server.js
export function app() {
const server = express();
…
return server;
}
Se preferisci esportare un gestore di URL in stile express, chiamalo handle
:
export function handle(req, res) {
res.send(‘hello world’);
}
Esegui deployment
firebase deploy
In questo modo, i contenuti statici vengono sottoposti a deployment su Firebase Hosting e Firebase può tornare all'app Express ospitata su Cloud Functions for Firebase.
(Facoltativo) Integrare con Firebase Authentication
Gli strumenti di deployment di Firebase compatibili con i framework web manterranno automaticamente sincronizzati lo stato del client e del server utilizzando i cookie. Per accedere al contesto di autenticazione,
l'oggetto Express res.locals
contiene facoltativamente un'istanza di Firebase
App autenticata (firebaseApp
) e l'utente attualmente connesso (currentUser
).