Búsqueda de sitios web

node.js - firebase muestra error cuando intento ejecutar funciones localmente


Mostrando el error de Firebase cada vez que ejecuto la función localmente usando el emulador en la CLI

firebase emulators:start --only functions

Iniciando emuladores: ["functions"]

funciones: Usando node@8 desde el host.

funciones: Emulador iniciado en http://localhost:5001

funciones: Observando "E:\dir\functions" para Funciones en la Nube...

Error: No se puede encontrar el módulo 'E:\dir\functions'

en Function.Module._resolveFilename (module.js:548:15)

en Function.Module._load (module.js:475:25)

en Module.require (module.js:597:17)

en require (internal/module.js:11:18)

en C:\Usuarios\d\AppData\Roaming\npm\node_modules\firebase-tools\lib\emulator\functionsEmulatorRuntime.js:459:29

en Generator.next()

en C:\Usuarios\d\AppData\Roaming\npm\node_modules\firebase-tools\lib\emulator\functionsEmulatorRuntime.js:7:71

en nueva Promesa()

en __awaiter (C:\Usuarios\d\AppData\Roaming\npm\node_modules\firebase-tools\lib\emulator\functionsEmulatorRuntime.js:3:12)

en main (C:\Usuarios\d\AppData\Roaming\npm\node_modules\firebase-tools\lib\emulator\functionsEmulatorRuntime.js:421:12)

Su función fue detenida porque generó un error no controlado.

Uso typescript para escribir funciones en la nube.

aquí está mi index.ts

import * as functions from 'firebase-functions';
import * as admin from "firebase-admin";

var cert = require("./skey.json");

admin.initializeApp({
    credential: admin.credential.cert(cert),
    databaseURL: "https://bhau-tk.firebaseio.com"
});

exports.basicHTTP = functions.https.onRequest((req, res) => {
    res.send("Hello world!!");
})

package.json contiene

{
  "name": "functions",
  "scripts": {
    "lint": "tslint --project tsconfig.json",
    "build": "tsc",
    "serve": "npm run build && firebase serve --only functions",
    "shell": "npm run build && firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "8"
  },
  "main": "lib/index.js",
  "dependencies": {
    "firebase-admin": "~7.0.0",
    "firebase-functions": "^2.3.0",
    "firebase-functions-test": "^0.1.6"
  },
  "devDependencies": {
    "tslint": "^5.12.0",
    "typescript": "^3.2.2"
  },
  "private": true
}

y estructura del proyecto es

Respuesta #1

Debes tener en cuenta que la configuración de tu proyecto está compilando los archivos fuente de TS bajo src y colocando los archivos JavaScript resultantes en lib. Por lo tanto, debes referirte a las cosas en tu carpeta de funciones en relación con esa ubicación.

Dado que tu index.js compilado está en lib, y tu archivo skey.json está bajo src, tendrás que referirte a él de esa manera:

var cert = require("../src/skey.json");

Sin embargo, no lo haría de esa manera. Pondría skey.json en la carpeta de funciones (ya que no es código fuente) y me referiría a él así:

var cert = require("../skey.json");