Per gli sviluppatori che preferiscono scrivere funzioni in TypeScript, Cloud Functions fornisce due tipi di assistenza:
- Crea e configura progetti TypeScript per la transpilazione automatica all'inizializzazione (
firebase init functions
). - Traspila 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 quando si scrivono funzioni:
- TypeScript supporta le funzionalità JavaScript più recenti, come async/await, semplificando la gestione delle promesse
- Un lint Cloud Functions evidenzia i problemi comuni durante la codifica
- La sicurezza del tipo ti aiuta a evitare errori di runtime nelle funzioni di cui è stato eseguito il deployment
Se non hai mai utilizzato TypeScript, consulta TypeScript in 5 minuti.
Inizializzazione di un nuovo progetto Cloud Functions con TypeScript
Esegui firebase init functions
in una nuova directory. Lo strumento ti 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.
Utilizzo di un progetto TypeScript esistente
Se hai già un progetto TypeScript, puoi aggiungere un hook pre-deployment per assicurarti che il progetto venga transpiled ogni volta che esegui il deployment del codice in Cloud Functions for Firebase. Avrai bisogno di un
file tsconfig.json
correttamente formato e di un progetto Firebase, nonché di apportare
le seguenti modifiche alla configurazione di Firebase:
Modifica
package.json
per aggiungere uno script bash per compilare il progetto TypeScript. Ad esempio:{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...
Modifica
firebase.json
per aggiungere un hook predeployment per eseguire lo script di compilazione. Ad esempio:{ "functions": { "predeploy": "npm --prefix functions run build", } }
Con questa configurazione, un comando firebase deploy --only functions
compila il codice TypeScript e lo esegue come funzioni.
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 di Git o un altro backup prima di iniziare.
Per eseguire la migrazione di un progetto Cloud Functions JavaScript esistente:
- Crea un checkpoint Git e salva le copie dei file di origine JavaScript esistenti.
- Nella directory del progetto, esegui
firebase init functions
e selezionaTypeScript
quando ti viene chiesto un linguaggio per scrivere le funzioni. - Quando ti viene chiesto se vuoi sovrascrivere il file
package.json
esistente, seleziona No, a meno che tu non sia sicuro di non voler conservare il file esistente. - Elimina
index.ts
nella directoryfunctions/src
, sostituendola con il codice sorgente esistente. - Nel file
tsconfig.json
creato all'inizializzazione, imposta le opzioni del compilatore per consentire JavaScript:"allowJs": true
. - Copia il file
package.json
salvato nella directoryfunctions
e modificalo in modo da impostare"main"
su"lib/index.js"
. Sempre in
package.json
, aggiungi uno script di compilazione 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, se necessario.
Emulazione delle 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 la compilazione e
servono/avviano la shell di funzioni.
Log di Functions per i progetti TypeScript
Durante firebase deploy
, il codice index.ts
del progetto viene transpiled in index.js
,
il che significa che il log di Cloud Functions mostrerà i numeri di riga del
file index.js
e non il codice che hai scritto. Per aiutarti a trovare più facilmente i percorsi e i 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.