无法在本地测试云功能,模拟器无法启动 TypeError: _onRequestWithOpts is not a function

Posted

技术标签:

【中文标题】无法在本地测试云功能,模拟器无法启动 TypeError: _onRequestWithOpts is not a function【英文标题】:Can't test cloud functions locally, emulator fails to start with TypeError: _onRequestWithOpts is not a function 【发布时间】:2019-11-18 17:10:35 【问题描述】:

当我尝试从项目中的函数目录启动 shell 进行本地测试时,模拟器启动但我的函数无法加载。

当我运行“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.

【问题讨论】:

如果您在使用 Firebase CLI 时遇到问题,请将问题发布到 GitHub,而不是 Stack Overflow。 github.com/firebase/firebase-tools 我更新到最新版本后也遇到这个问题 我收到同样的错误 【参考方案1】:

将 firebasefunction 降级到 3.0.0 版

【讨论】:

【参考方案2】:

我发现错误:

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

第 276 行:

const _onRequestWithOpts = httpsProvider._onRequestWithOpts;

应该是:

const _onRequestWithOpts = httpsProvider._onRequestWithOptions;

【讨论】:

【参考方案3】:

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

这将很快得到解决,您可以在此处进行操作: https://github.com/firebase/firebase-tools/issues/1480

【讨论】:

非常可靠的新鲜答案。谢谢! 完美运行。谢谢! 我必须将 firebase-tools 更新到最新版本才能正常工作。【参考方案4】:

删除 node_modules 然后运行 ​​npm installnpm install firebase-adminnpm install firebase-functions@3.0 .2

【讨论】:

【参考方案5】:

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

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

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

总结一下:

    npm i firebase-functions@latest

    npm i -g firebase-tools@latest

    关闭并打开命令行

【讨论】:

【参考方案6】:

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

    Firebase -> 设置 -> 服务帐户“生成新私钥”并将您的文件保存在您的函数目录下。尝试将其命名为“service-account.json”之类的名称。

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

    修改 tsconfig.json "strict":false, "noImplicitAny": false,"

    瞧!

【讨论】:

【参考方案7】:

如果您最近更新了GOOGLE_APPLICATION_CREDENTIALS 并且没有重新启动iTerm or Terminal,请退出并重新启动它。我做到了,效果很好。

您的终端必须在更新 GOOGLE_APPLICATION_CREDENTIALS simple 后重新启动.. 这可以帮助某个地方的人。

【讨论】:

以上是关于无法在本地测试云功能,模拟器无法启动 TypeError: _onRequestWithOpts is not a function的主要内容,如果未能解决你的问题,请参考以下文章

设置 Firebase 本地模拟器云功能环境配置值

Firestore 云功能无法在本地运行

无法将 Firebase Cloud Storage Function 范围限定为本地模拟器上的特定存储桶

由于 CORS 限制,无法使用 firebase 在本地进行测试

函数“FunctionName”的侦听器无法在 .net core azure 中启动

Firebase 云功能本地代码更改未反映在模拟器中