我正在尝试使用云函数shell在本地测试我的函数。我成功地使shell为我的代码工作。我发现这不需要将我的代码部署到云中。但是,每当我通过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')
});
我发现了这一点,因为我使用的是typescript,所以在运行云函数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-本地使用-cloud-ffunctions-shell-32c821f8a5ce