Per gli sviluppatori che preferiscono scrivere funzioni in TypeScript, Cloud Functions offre due tipi di supporto:
- Crea e configura progetti TypeScript per la transpilazione automatica all'inizializzazione (
firebase init functions). - Transcompila il codice sorgente TypeScript esistente in JavaScript al momento del deployment tramite un hook predeploy.
Seguendo le istruzioni riportate in questa guida, puoi eseguire la migrazione di un progetto JavaScript esistente a TypeScript e continuare a eseguire il deployment delle funzioni utilizzando un hook predeploy per transpilare il codice sorgente. TypeScript offre molti vantaggi rispetto a JavaScript standard quando si scrivono funzioni:
- TypeScript supporta le funzionalità JavaScript più recenti, come async/await, semplificando la gestione delle promesse.
- Un Cloud Functions linter evidenzia i problemi comuni durante la codifica.
- La sicurezza dei tipi ti aiuta a evitare errori di runtime nelle funzioni di cui è stato eseguito il deployment.
Se non hai familiarità con TypeScript, consulta TypeScript in 5 minuti.
Inizializzare un nuovo progetto Cloud Functions con TypeScript
Esegui firebase init functions in una nuova directory. Lo strumento offre opzioni per creare il progetto con JavaScript o TypeScript. Scegli TypeScript per generare la seguente struttura del progetto:
myproject
+- functions/ # Directory containing all your functions code
|
+- package.json # npm package file describing your Cloud Functions code
|
+- tsconfig.json
|
+- .eslintrc.js # Optional file if you enabled ESLint
+- tsconfig.dev.json # Optional file that references .eslintrc.js
|
+- src/ # Directory containing TypeScript source
| |
| +- index.ts # main source file for your Cloud Functions code
|
+- lib/
|
+- index.js # Built/transpiled JavaScript code
|
+- index.js.map # Source map for debugging
Al termine dell'inizializzazione, rimuovi il commento dall'esempio in index.ts ed esegui npm run serve per vedere una funzione "Hello World" in azione.
Utilizzare un progetto TypeScript esistente
Se hai un progetto TypeScript esistente, puoi aggiungere un hook predeploy per
assicurarti che il progetto venga transpilato ogni volta che esegui il deployment del codice in
Cloud Functions for Firebase. Avrai bisogno di un file tsconfig.json ben formato e di un progetto Firebase, oltre a dover apportare le seguenti modifiche alla configurazione di Firebase:
Modifica
package.jsonper aggiungere uno script bash per creare il progetto TypeScript. Ad esempio:{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...Modifica
firebase.jsonper aggiungere un hook predeploy per eseguire lo script di build. Ad esempio:{ "functions": { "predeploy": "npm --prefix functions run build", } }
Con questa configurazione, un comando firebase deploy --only functions crea il codice TypeScript ed esegue il deployment come funzioni.
Eseguire la migrazione di un progetto JavaScript esistente a TypeScript
Se hai un progetto Cloud Functions esistente che hai inizializzato e sviluppato in JavaScript, puoi eseguirne la migrazione a TypeScript. Ti consigliamo vivamente di creare un checkpoint git o un altro backup prima di iniziare.
Per eseguire la migrazione di un progetto JavaScript Cloud Functions esistente:
- Crea un checkpoint git e salva copie dei file sorgente JavaScript esistenti.
- Nella directory del progetto, esegui
firebase init functionse selezionaTypeScriptquando ti viene chiesto un linguaggio per scrivere le funzioni. - Quando ti viene chiesto se vuoi sovrascrivere il file
package.jsonesistente, seleziona No a meno che tu non voglia conservare il file esistente. - Elimina
index.tsnella directoryfunctions/src, sostituendolo con il codice sorgente esistente. - Nel file
tsconfig.jsoncreato durante l'inizializzazione, imposta le opzioni del compilatore per consentire JavaScript:"allowJs": true. - Copia il file
package.jsonsalvato nella directoryfunctionse modificalo per impostare"main"su"lib/index.js". Sempre in
package.json, aggiungi uno script di build per TypeScript come il seguente:{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...Aggiungi
"typescript"come dipendenza di sviluppo eseguendonpm install --save-dev typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser.Per tutte le dipendenze, esegui
npm install --save @types/<dependency>.Riscrivi il codice sorgente da .js a .ts come preferisci.
Emulare le funzioni TypeScript
Per testare le funzioni TypeScript in locale, puoi utilizzare gli strumenti di emulazione descritti
in Eseguire le funzioni in locale. È importante compilare il codice prima di utilizzare questi strumenti, quindi assicurati di eseguire npm run build all'interno della directory delle funzioni prima di eseguire firebase emulators:start o firebase functions:shell. In alternativa, esegui npm run serve o npm run shell come scorciatoia. Questi comandi eseguono sia la build sia l'avvio/l'esecuzione della shell delle funzioni.
Log delle funzioni per i progetti TypeScript
Durante firebase deploy, index.ts del progetto viene transpilato in index.js, il che significa che il log di Cloud Functions restituirà i numeri di riga del file index.js e non il codice che hai scritto. Per semplificare la ricerca dei percorsi e dei numeri di riga corrispondenti in index.ts, firebase deploy crea functions/lib/index.js.map. Puoi utilizzare questa mappa di origine
nell'IDE che preferisci o tramite un modulo Node.