无法看到部署的Firebase功能

时间:2017-03-25 18:19:54

标签: firebase firebase-console google-cloud-functions

我按照以下步骤操作:

  1. Firebase CLI(命令行界面)需要Node.js和npm,您可以按照https://nodejs.org/

    上的说明进行安装
    • 安装Node.js也会安装npm
  2. 安装了Node.js和npm后,通过npm安装Firebase CLI:
    npm install -g firebase-tools

    • 这将安装全局可用的firebase命令。要更新到最新版本,请重新运行相同的命令
  3. 初始化您的项目:
    一个。运行firebase登录以通过浏览器登录并验证firebase工具。

    b。转到Firebase项目目录或创建目录

    ℃。运行firebase init函数

    • 该工具为您提供了使用npm安装依赖项的选项。如果您想以另一种方式管理依赖关系,可以安全地拒绝。
  4. 选择关联的firebase项目

  5. 选择Y以使用npm

  6. 安装依赖项
  7. 转到目录设置firebase功能

  8. 使用您创建的功能编辑index.js文件

  9. 运行firebase使用--add添加Firebase项目

  10. 运行firebase deploy --only函数以部署函数

  11. 在完成所有这些后,我在部署完成后在终端中收到消息,但在Firebase控制台中,当我单击“功能”选项卡时,没有列出任何功能!?

15 个答案:

答案 0 :(得分:10)

快速提示:确保在index.js文件中导出要尝试部署的功能。您的firebase项目将部署,但除非导出,否则Cloud Functions将不可用。

答案 1 :(得分:3)

在步骤7中,您必须取消注释其中的示例函数并保存文件。然后,在deploy命令的输出中,您将获得创建的helloWorld函数的URL。

答案 2 :(得分:3)

确保在取消注释默认功能后保存文件,然后使用

firebase deploy

答案 3 :(得分:2)

确保您至少运行3.5.0版本firebase-tools。要检查您的版本,请运行:

firebase --version

如果您正在运行默认设置,则可以使用以下方式更新firebase-tools

npm install -g firebase-tools

答案 4 :(得分:1)

我遇到了完全相同的问题,我通过确保包含所有函数的index.js文件保存在"函数"项目文件夹中的文件夹。我正在使用vs代码,所以我只需点击文件/另存为并选择了正确的文件夹。

答案 5 :(得分:1)

@ Learn2Code 我有完全相同的问题。 确保在初始化应用程序之前导出index.js文件中的函数。

现在,继续从您的项目目录运行firebase deploy

例如:

// Take the text parameter passed to this HTTP endpoint and insert it into the
// Realtime Database under the path /messages/:pushId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
    // Grab the text parameter.
    const original = req.query.text;
    // Push the new message into the Realtime Database using the Firebase Admin SDK.
    const snapshot = await admin.database().ref('/messages').push({original: original});
    // Redirect with 303 SEE OTHER to the URL of the pushed object in the Firebase console.
    res.redirect(303, snapshot.ref.toString());
  });

const admin = require('firebase-admin');
admin.initializeApp();

答案 6 :(得分:1)

对于Cloud Functions,需要将您的功能添加到特殊的导出对象中(这是Node使该功能可在当前文件之外访问的方式) 确保在您的函数目录中包含index.js:

enter image description here

函数示例:

// Import the Firebase SDK for Google Cloud Functions.
const functions = require('firebase-functions');
// Import and initialize the Firebase Admin SDK.
const admin = require('firebase-admin');
admin.initializeApp();



// Your function declaration. Example of a fired function when a user is created in Auth feature.
exports.myFunction = functions.auth.user().onCreate(async (user) => {
// ... your code here.
});

然后进行部署,请按照以下步骤操作:

  • 首先,如果未完成,请确保已安装firebase-tools: $ npm install -g firebase-tools
  • 并初始化:$ firebase init

  • 完整部署: $ firebase deploy

  • 或用于功能部署 $ firebase deploy --only功能
  • 或部署特定功能 $ firebase deploy --only功能:function1,功能:function2

一个很好的例子,很好的阅读:https://codelabs.developers.google.com/codelabs/firebase-cloud-functions/#7

答案 7 :(得分:0)

我最近遇到了同样的问题,同时执行 Actions on Google Node.js Client Library Version 1 Migration Guide. Node.js Client Library V2 (我强烈推荐)我花了一段时间才到弄清楚发生了什么。在那里,我无法弄清楚问题是什么!所以这就是我所做的,它对我有用:

  1. 确保您拥有云功能的备份副本index.js),也许还有package.json(以防您不想要)记住你以前安装过的软件包 - 有时可能很烦人。

  2. 从项目文件夹中删除整个功能目录

  3. 使用firebase init重新启动firebase CLI并选择功能

  4. 将云功能初始化后,将CD放入功能文件夹,然后使用firebase deploy --only functions 重新部署

  5. 如果一切都正常,您现在应该会在 firebase信息中心控制台上看到您的功能已部署。

  6. N.B: Google最近在2018年4月16日发布了Node.js Client Library version 2 (v2),其中包含许多新功能。在2018年4月16日之后,Google上的新功能不再添加到客户端库的v1 。如果要使用新功能,则必须迁移到v2客户端库

    此外, v1客户端库不支持Dialogflow v2 。如果您需要Dialogflow v2功能,则还需要迁移到客户端库的v2。

    希望这有帮助。

答案 8 :(得分:0)

澄清一个问题 - 好像index.js文件夹中的functions文件必须导出在同一文件中创建的函数(类似于Fran所说的)。

似乎尝试将文件整理到子文件夹中无法使用Firebase功能 - 使用firebase serve进行本地测试也适用相同的规则(必须创建codeinside functions/index.js)。

希望这有助于某人!

答案 9 :(得分:0)

1)确保在index.js文件中导出要尝试部署的功能。

2)在文件顶部写下“use-strict”(index.js),然后使用console来部署你的函数

答案 10 :(得分:0)

在firebase初始化中检查“默认项目”。选择一个名字相似的人是我的错误。 ;)

答案 11 :(得分:0)

情况相同。问题是,当我在做

$ firebase deploy --only "myFunction" 

该过滤器名称:myFunction与我尝试部署的函数的名称不完全相同。愚蠢的错误,但花了我一天的时间才意识到...

答案 12 :(得分:0)

使用firebase projects:listfirebase use <project>来确保正确设置了Firebase CLI的“当前项目”,无论您位于哪个文件夹中。

示例:

> firebase projects:list
  ✔ Preparing the list of your Firebase projects
  ┌──────────────────────┬─────────────────────┬──────────────────────┐
  │ Project Display Name │ Project ID          │ Resource Location ID │
  ├──────────────────────┼─────────────────────┼──────────────────────┤
  │ alpha                │ alpha     (current) │ [Not specified]      │
  ├──────────────────────┼─────────────────────┼──────────────────────┤
  │ beta                 │ beta                │ [Not specified]      │
  └──────────────────────┴─────────────────────┴──────────────────────┘

  2 project(s) total.

> firebase use beta
  Now using project beta

答案 13 :(得分:0)

我也有这个错误。我从先前的项目复制了在Google Cloud Functions上运行的工作功能,无法弄清楚为什么一旦部署它就不会显示。

我需要将我的函数包装在functions.https.onRequest()中,这在常规云函数中不是必需的。

答案 14 :(得分:0)

有同样的问题。

就我而言,通过使用firebase deploy和所有--only来解决,这显示出更好的错误消息传递,因此我不得不在Cloud Console中为该项目设置结算。可以通过在控制台中选择“可能的功能”来触发设置例程。

我还有一个问题,即项目中缺少服务帐户,因此我首先通过控制台设置了一个新项目,然后将其添加到Firebase。