如何正确地进行树抖动以减少包大小并为每个云功能单独的入口点

Joo*_*oon 7 firebase google-cloud-functions tree-shaking

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

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

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

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

有没有办法不共享入口点,index.js,并通过使用像 webpack 这样的打包器来拥有完全独立的包?

Dou*_*son 4

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

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

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

我不建议使用 webpack。不值得您花时间进行配置。