首页 > 解决方案 > 使用云函数外壳在本地运行云函数代码

问题描述

我正在尝试使用云函数外壳在本地测试我的函数。我成功地使外壳程序适用于我的代码。我看到这不需要将我的代码部署到云中。但是,每当我通过 shell 运行该函数时,它工作正常,但它使用的是部署的代码,而不是本地代码(我正在使用控制台语句检查这一点,如示例代码所示)。除非我部署,否则我无法调用本地代码。

此外,在我的云函数中,我使用 onCreate 方法创建实时数据库并回写到同一个实时数据库。当我使用 shell 进行本地测试时,我为函数输入数据文件并写回实时数据库。所以我实际上是在尝试编写代码并在本地运行它以写入云上的实时数据库。这是否可以在不部署功能的情况下使用 shell 来实现?

我的示例函数如下所示:

export const myCloudFunction = functions.database.instance(getDatabaseIdentifier()).ref(PATH).onCreate(async (snapshot, context) => {

    console.log('local code invoked')
    // or
    console.log('deployed code invoked')
});

标签: firebasefirebase-realtime-databasegoogle-cloud-functions

解决方案


我想通了,因为我使用的是打字稿,我需要在运行云函数 shell 之前将我的代码转换为 javascript。

我认为它调用已部署代码的原因很明显,因为它实际上并没有调用已部署代码,而是调用了在我部署到云时生成的本地转译代码。现在我需要做的就是在我运行云函数 shell 之前,在我的函数文件夹中使用以下命令转换我的代码。

// run this command in your functions folder 
   'npm run-script build'

此构建在“lib”文件夹中生成转译的 javascript 代码。现在我们可以运行以下命令来调用 shell。

firebase functions:shell

现在我们可以模拟本地未部署的云功能并在本地进行测试。

查看此中等帖子以获取详细说明: https ://medium.com/@moki298/test-your-firebase-cloud-functions-locally-using-cloud-functions-shell-32c821f8a5ce


推荐阅读