我有一个供应商应用程序和一个客户应用程序共享一个Firestore。
供应商函数需要多个导入
import x from "X";
import y from "Y";
import z from "Z";
客户函数也需要多个导入,但与供应商导入不同
import a from "A";
import b from "B";
import c from "C";
所以有可能有两个index.js文件,这样当客户发出请求时,import x from "X";
不会被调用。
正如在线程中提到的:
在函数体内部执行昂贵的require则不会必然导致较慢的函数调用,因为需要被缓存内存中。热调用(不需要冷启动的调用)将运行所需的行,但实际上不需要重新加载代码。
// runs at cold start time, use for shared dependencies const commonImport = require("common-import"); exports.myFunc = functions.https.onRequest((req, res) => { // runs only at invocation time but cached, use for unshared deps const expensiveImport = require("expensive-import"); });
不管它的价值是什么,这种特殊类型的问题也很重要Firebase团队正在积极研究如何改进。你可能会考虑注册Firebase Alpha计划来接收这些功能的早期测试。
这里也提供了一个解决方法:
const common = require("common-import"); if (process.env.FUNCTION_NAME === "fn1") { const expensive1 = require("expensive-import-1"); } if (process.env.FUCNTION_NAME === "fn2") { const expensive2 = require("expensive-import-2"); } exports.fn1 = functions.https.onRequest((req, res) => { res.send(expensive1.expensiveResult()); }); exports.fn2 = functions.https.onRequest((req, res) => { res.send(expensive2.expensiveResult()); });
这将只在冷启动时加载你想要的文件。那些当我们在本地运行代码时,环境变量将不存在然而,要发现要部署哪些功能,您必须始终导出要部署的所有函数。
有关如何管理多个函数的更多信息,您可以参考文档:
当您将Cloud Functions集成到您的项目中时,您的代码可以展开以包含许多独立的函数。你可能吃得太多了功能要合理地放在单个文件中,或者不同的团队也可以部署不同的功能组,创建一个团队的风险覆盖或意外删除另一个团队的功能。云函数提供了不同的方式来组织代码来实现它更容易导航和维护您的功能。