无法在本地测试云功能,模拟器无法以TypeError开头:_onRequestWithOpts不是函数

时间:2019-07-09 07:38:10

标签: typescript google-cloud-functions firebase-cli

当我尝试从项目中的functions目录启动外壳程序进行本地测试时,模拟器会启动,但是我的函数无法加载。

当我运行“ npm run build”时,我没有收到任何错误。发生什么事了?

我尝试删除功能目录并使用firebase-tools cli再次创建它,但仍然出现相同的错误。我还导出了管理员凭据。

我正在使用从firebase-tools cli生成的index.ts文件中创建的默认方法。

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

admin.initializeApp();
// // Start writing Firebase Functions
// // https://firebase.google.com/docs/functions/typescript
//
export const helloWorld = functions.https.onRequest((request, 
response) => {
 response.send("Hello from Firebase!");
});

我希望仿真器启动该函数的实例以进行测试,但相反,我看到此错误:

✔  functions: Emulator started at http://localhost:5001
⚠  TypeError: _onRequestWithOpts is not a function
at Object.httpsProvider._onRequestWithOpts (/usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:278:24)
at Object.httpsProvider.onRequest (/usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:283:34)
at Object.<anonymous> (/Volumes/G-DRIVE mobile USB-C/CLEAN UP/Documents/code_bank/typescript/theincrowdapp/functions/lib/index.js:9:38)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Module.require (internal/modules/cjs/loader.js:690:17)
at require (internal/modules/cjs/helpers.js:25:18)
⚠  We were unable to load your functions code. (see above)
   - It appears your code is written in Typescript, which must be compiled before emulation.
   - You may be able to run "npm run build" in your functions directory to resolve this.

6 个答案:

答案 0 :(得分:14)

如果遇到此错误,请在npm install firebase-functions@3.0.2目录中运行functions

此问题将很快修复,您可以在此处进行以下操作: https://github.com/firebase/firebase-tools/issues/1480

答案 1 :(得分:2)

我发现以下错误:

node_modules / firebase-tools / lib / emulator / functionsEmulatorRuntime.js

第276行:

const _onRequestWithOpts = httpsProvider._onRequestWithOpts;

应为:

const _onRequestWithOpts = httpsProvider._onRequestWithOptions;

答案 2 :(得分:1)

我遇到了同样的问题,但是通过执行以下操作使其与最新版本的firebase- *软件包一起使用。

  1. Firebase->设置->服务帐户“ Generate new private key”,并将文件保存在功能目录下。尝试将其命名为“ service-account.json”。

  2. 在您的命令行(例如Mac)上,运行“ export GOOGLE_APPLICATION_CREDENTIALS =

  3. 修改tsconfig.json“ strict”:false,“ noImplicitAny”:false,“

  4. Voila!

答案 3 :(得分:0)

将firebase函数降级到3.0.0版

答案 4 :(得分:0)

删除 node_modules ,然后运行 npm install npm install firebase-admin npm install firebase-functions@3.0 .2

答案 5 :(得分:0)

尽管我将firebase-funcitons更新为最新版本,但我一年前就遇到了这个错误,昨天又遇到了这个错误。

我还必须使用npm i -g firebase-tools@latest更新firebase-tools

最后要做的是关闭命令行/打开一个新选项卡,以便使用最新版本

总结:

  1. npm i firebase-functions@latest

  2. npm i -g firebase-tools@latest

  3. 关闭并打开命令行