8

我正在使用带有 TypeScript 的 Google Firebase Cloud Functions,我发现即使每个函数都是单独部署的,它们都共享相同的包和依赖项,即使某些函数不使用它们也不导入它们。

就我而言,一个云功能使用 Redis,而其他云功能不使用。我有 10 个功能。所有 10 个函数实际上最终都导入了与 redis 相关的代码,即使它们没有导入它们。

由于所有函数共享相同的入口点,index.js。目前似乎不可能为每个函数设置单独的摇树捆绑包/入口点。

这在捆绑包大小/冷启动时间/内存等方面非常低效。这也意味着随着我拥有越来越多的功能,捆绑包大小将随着所有功能一起增长。它不可扩展。

有没有办法不共享入口点 index.js,并通过使用 webpack 之类的捆绑器来完全独立的捆绑包?

4

2 回答 2

3

firebase init您可以为应该与其他功能隔离部署的每个功能创建不同的本地 Firebase 工作区(使用)。您必须指示 CLI 不要使用 来覆盖部署时的其他功能--only functions:yourFunctionName

或者,您可以使用 Cloud 工具 (gcloud) 而不是 Firebase 工具来部署函数,但您将无法使用 firebase-functions 及其 TypeScript 绑定。

或者,您可以延迟加载模块,而不是在函数的全局范围内静态加载它们,如本视频所述。

我不建议使用 webpack。配置它不值得你花时间。

于 2019-06-03T12:38:03.290 回答
0

您可以尝试better-firebase-functions,它通过自动延迟加载仅通过检查环境变量调用的函数来优雅地解决这个问题FUNCTION_NAME- 请参阅https://link.medium.com/4g3CJOLXidb

于 2021-01-24T10:16:28.337 回答