当我尝试在本地运行功能时,firebase显示错误

时间:2019-06-05 13:58:58

标签: node.js typescript firebase google-cloud-functions firebase-cli

每当我在CLI中使用模拟器在本地运行函数时,显示Firebase错误

$ firebase emulators:start --only functions
  

启动仿真器:[“功能”]

     

功能:从主机使用node @ 8。

     

功能:仿真器始于http://localhost:5001

     

功能:正在监视“ E:\ dir \ functions”的云功能...

     

错误:找不到模块'E:\ dir \ functions'

     

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

     

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

     

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

     

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

     

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

     

在Generator.next()

     

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

     

在新的Promise()中

     

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

     

在主目录(C:\ Users \ d \ AppData \ Roaming \ npm \ node_modules \ firebase-tools \ lib \ emulator \ functionsEmulatorRuntime.js:421:12)

     

您的函数被杀死,因为它引发了未处理的错误。

我使用打字稿编写云函数。

这是我的 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 包含

{
  "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
}

项目结构

enter image description here

1 个答案:

答案 0 :(得分:0)

您应该记住,您的项目配置是在src下编译TS源文件,并将生成的JavaScript文件放入lib中。因此,您应该在功能文件夹中引用相对于该位置的内容。

由于编译后的index.js位于lib中,而skey.json文件位于src下,因此您必须以这种方式引用它:

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

但是,我不会那样做。我将skey.json放到functions文件夹中(因为它不是源代码),并像这样引用它:

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