我按照以下步骤操作:
Firebase CLI(命令行界面)需要Node.js和npm,您可以按照https://nodejs.org/
上的说明进行安装安装了Node.js和npm后,通过npm安装Firebase CLI:
npm install -g firebase-tools
初始化您的项目:
一个。运行firebase登录以通过浏览器登录并验证firebase工具。
b。转到Firebase项目目录或创建目录
℃。运行firebase init函数
选择关联的firebase项目
选择Y以使用npm
转到目录设置firebase功能
使用您创建的功能编辑index.js文件
运行firebase使用--add添加Firebase项目
运行firebase deploy --only函数以部署函数
在完成所有这些后,我在部署完成后在终端中收到消息,但在Firebase控制台中,当我单击“功能”选项卡时,没有列出任何功能!?
答案 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:
函数示例:
// 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 init
完整部署: $ firebase deploy
一个很好的例子,很好的阅读: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 (我强烈推荐)我花了一段时间才到弄清楚发生了什么。在那里,我无法弄清楚问题是什么!所以这就是我所做的,它对我有用:
确保您拥有云功能的备份副本(index.js
),也许还有package.json
(以防您不想要)记住你以前安装过的软件包 - 有时可能很烦人。
从项目文件夹中删除整个功能目录。
使用firebase init
重新启动firebase CLI并选择功能
将云功能初始化后,将CD放入功能文件夹,然后使用firebase deploy --only functions
重新部署。
如果一切都正常,您现在应该会在 firebase信息中心控制台上看到您的功能已部署。
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:list
和firebase 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。