Utilice TypeScript para funciones en la nube

Para los desarrolladores que prefieren escribir funciones en TypeScript, Cloud Functions ofrece dos tipos de soporte:

  • Cree y configure proyectos de TypeScript para la transpilación automática en la inicialización ( firebase init functions ).
  • Transpile el código fuente de TypeScript existente a JavaScript en el momento de la implementación mediante un enlace previo a la implementación .

Siguiendo las instrucciones de esta guía, puede migrar un proyecto JavaScript existente a TypeScript y continuar implementando funciones usando un enlace previo a la implementación para transpilar su código fuente. TypeScript ofrece muchos beneficios sobre JavaScript básico al escribir funciones:

  • TypeScript admite las últimas funciones de JavaScript como async/await, lo que simplifica la gestión de promesas
  • Un linter de Cloud Functions destaca problemas comunes mientras codificas
  • La seguridad de tipos le ayuda a evitar errores de tiempo de ejecución en las funciones implementadas

Si eres nuevo en TypeScript, consulta TypeScript en 5 minutos .

Inicializando un nuevo proyecto de Cloud Functions con TypeScript

Ejecute firebase init functions en un nuevo directorio. La herramienta le brinda opciones para construir el proyecto con JavaScript o TypeScript. Elija TypeScript para generar la siguiente estructura del 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

Una vez completada la inicialización, descomente el ejemplo en index.ts y ejecute npm run serve para ver la función "Hola mundo" en acción.

Usando un proyecto TypeScript existente

Si tiene un proyecto TypeScript existente, puede agregar un enlace previo a la implementación para asegurarse de que su proyecto se transpile cada vez que implemente su código en Cloud Functions para Firebase. Necesitará un archivo tsconfig.json con el formato correcto y un proyecto de Firebase, y deberá realizar las siguientes modificaciones en su configuración de Firebase:

  1. Edite package.json para agregar un script bash para construir su proyecto TypeScript. Por ejemplo:

     {
       "name": "functions",
       "scripts": {
         "build": "npm run lint && tsc"
       }
     ...
    
  2. Edite firebase.json para agregar un enlace previo a la implementación para ejecutar el script de compilación. Por ejemplo:

     {
       "functions": {
         "predeploy": "npm --prefix functions run build",
       }
     }
    

Con esta configuración, un comando firebase deploy --only functions crea su código TypeScript y lo implementa como funciones.

Migrar un proyecto de JavaScript existente a TypeScript

Si tiene un proyecto de Cloud Functions existente que inicializó y desarrolló en JavaScript, puede migrarlo a TypeScript. Se recomienda encarecidamente crear un punto de control de git u otra copia de seguridad antes de comenzar.

Para migrar un proyecto existente de JavaScript Cloud Functions:

  1. Cree un punto de control de git y guarde copias de sus archivos fuente de JavaScript existentes.
  2. En el directorio del proyecto, ejecute firebase init functions y seleccione TypeScript cuando se le solicite un lenguaje para escribir funciones.
  3. Cuando se le pregunte si desea sobrescribir el archivo package.json existente, seleccione No a menos que esté seguro de que no desea conservar el archivo existente.
  4. Elimine index.ts en el directorio functions/src y reemplácelo con su código fuente existente.
  5. En el archivo tsconfig.json creado durante la inicialización, configure las opciones del compilador para permitir JavaScript: "allowJs": true .
  6. Copie su archivo package.json guardado en el directorio functions y edítelo para configurar "main" en "lib/index.js" .
  7. También en package.json , agregue un script de compilación para TypeScript como el siguiente:

     {
       "name": "functions",
       "scripts": {
         "build": "npm run lint && tsc"
       }
     ...
    
  8. Agregue "typescript" como dependencia de desarrollo ejecutando npm install --save-dev typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser .

  9. Para todas las dependencias, ejecute npm install --save @types/<dependency> .

  10. Vuelva a escribir el código fuente de .js a .ts como desee.

Emulando funciones de TypeScript

Para probar las funciones de TypeScript localmente, puede utilizar las herramientas de emulación descritas en Ejecutar funciones localmente . Es importante compilar su código antes de usar estas herramientas, así que asegúrese de ejecutar npm run build dentro de su directorio de funciones antes de ejecutar firebase emulators:start o firebase functions:shell . Alternativamente, ejecute npm run serve o npm run shell como acceso directo; Estos comandos ejecutan la compilación y sirven/inician el shell de funciones.

Registros de funciones para proyectos TypeScript

Durante firebase deploy , index.ts de su proyecto se transpila a index.js , lo que significa que el registro de Cloud Functions generará números de línea del archivo index.js y no el código que escribió. Para que le resulte más fácil encontrar las rutas correspondientes y los números de línea en index.ts , firebase deploy crea functions/lib/index.js.map . Puede utilizar este mapa fuente en su IDE preferido o mediante un módulo de nodo .