Para los desarrolladores que prefieren escribir funciones en TypeScript, Cloud Functions proporciona dos tipos de asistencia:
- Crear y configurar proyectos de TypeScript para que se transpilen automáticamente en el momento de la inicialización (
firebase init functions
) - Transpilar una fuente de TypeScript existente a JavaScript en el momento de la implementación a través de un hook previo a la implementación
Con las instrucciones de esta guía, podrás migrar un proyecto existente de JavaScript a TypeScript y seguir implementando funciones con un hook previo a la implementación para transpilar tu código fuente. A la hora de escribir funciones, TypeScript ofrece muchas ventajas en comparación con el JavaScript convencional:
- TypeScript es compatible con las características más recientes de JavaScript, como async/await, lo que simplifica la administración de promesas.
- Un linter de Cloud Functions detecta problemas comunes mientras escribes el código.
- La seguridad de tipos te ayuda a evitar errores durante el tiempo de ejecución en las funciones implementadas.
Si es la primera vez que usas TypeScript, consulta TypeScript en 5 minutos.
Cómo inicializar un proyecto nuevo de Cloud Functions con TypeScript
Ejecuta firebase init functions
en un directorio nuevo. La herramienta te ofrece opciones para compilar el proyecto con JavaScript o TypeScript. Selecciona TypeScript para generar la siguiente estructura de proyecto:
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
Cuando se complete la inicialización, quita el comentario de la muestra en index.ts y ejecuta npm run serve
para ver una función “Hello World” en acción.
Usa un proyecto existente de TypeScript
Si ya tienes un proyecto de TypeScript, puedes agregar un hook previo a la implementación para asegurarte de que el proyecto se transpile cada vez que implementes tu código en Cloud Functions para Firebase. Necesitarás un archivo tsconfig.json
con el formato correcto y un proyecto de Firebase. Además, deberás hacer las siguientes modificaciones en tu configuración de Firebase:
Edita
package.json
para agregar una secuencia de comandos bash a fin de compilar tu proyecto de TypeScript. Por ejemplo:{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...
Edita
firebase.json
para agregar un hook previo a la implementación y ejecutar la secuencia de comandos de compilación. Por ejemplo:{ "functions": { "predeploy": "npm --prefix functions run build", } }
Con esta configuración, un comando firebase deploy --only functions
compila tu código de TypeScript y lo implementa como funciones.
Cómo migrar un proyecto existente de JavaScript a TypeScript
Si tienes un proyecto de Cloud Functions que inicializaste y programaste en JavaScript, puedes migrarlo a TypeScript. Te recomendamos que crees un punto de control de git o una copia de seguridad de otro tipo antes de comenzar.
Para migrar un proyecto existente de Cloud Functions inicializado en JavaScript, haz lo siguiente:
- Crea un punto de control de git y guarda copias de tus archivos originales de JavaScript existentes.
- En el directorio del proyecto, ejecuta
firebase init functions
y seleccionaTypeScript
cuando se te pida que selecciones un lenguaje para escribir funciones. - Cuando se te pregunte si quieres reemplazar el archivo
package.json
existente, selecciona No, a menos que estés seguro de no querer conservarlo. - Borra
index.ts
en el directoriofunctions/src
y reemplázalo por tu código fuente existente. - En el archivo
tsconfig.json
creado en la inicialización, configura las opciones del compilador para permitir JavaScript:"allowJs": true
. - Copia el archivo
package.json
guardado en el directoriofunctions
y edítalo para asignar el valor"main"
a"lib/index.js"
. También en
package.json
, agrega una secuencia de comandos de compilación para TypeScript como la siguiente:{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...
Ejecuta
npm install --save-dev typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser
para agregar"typescript"
como una dependencia de programación.Para todas las dependencias, ejecuta
npm install --save @types/<dependency>
.Vuelve a escribir el código fuente de .js a .ts como desees.
Emula funciones de TypeScript
Puedes usar las herramientas de emulación que se describen en Ejecuta funciones de manera local para probar las funciones de TypeScript localmente. Antes de usar estas herramientas, es importante que compiles tu código. Asegúrate de ejecutar npm run build
en el directorio de funciones antes de ejecutar firebase emulators:start
o firebase functions:shell
. Otra opción es ejecutar npm run serve
o npm run shell
como atajo, ya que ambos comandos ejecutan la compilación y entregan o inician el shell de las funciones.
Registros de funciones para proyectos de TypeScript
Durante firebase deploy
, el archivo index.ts
de tu proyecto se transpila a index.js
, lo que significa que el registro de Cloud Functions generará números de líneas desde el archivo index.js
y no desde el código que escribiste. Para que puedas encontrar las rutas y los números de línea en index.ts
, firebase deploy
crea functions/lib/index.js.map
. Puedes usar este mapa de origen en tu IDE preferido o con un módulo de nodos.