如何正确地进行 tree shaking 以减少包大小并为每个云函数分离入口点
How to properly do tree shaking to reduce bundle size and separate entry point for each cloud function
我正在使用 Google 带有 TypeScript 的 Firebase Cloud Functions,我发现即使每个函数都是单独部署的,它们都共享相同的包和依赖项,即使某些函数不使用它们也不行导入它们。
就我而言,一个云函数使用 Redis 而其他的则不使用。我有10个功能。 10个函数虽然没有导入,但实际上最终都导入了redis相关代码
由于所有函数共享同一个入口点,index.js。目前看来不可能为每个函数设置单独的 tree-shaking 包/入口点。
这在包大小/冷启动时序/内存/等方面非常低效。这也意味着随着我拥有越来越多的功能,所有功能的包大小将一起增长。它不可扩展。
有没有办法不共享入口点,index.js,并通过使用像 webpack 这样的打包器来完全独立的打包?
您可以为每个应与其他功能隔离部署的功能创建不同的本地 Firebase 工作区(firebase init
)。您必须指示 CLI 不要使用 --only functions:yourFunctionName
来部署它来覆盖部署中的其他功能。
或者,您可以使用 Cloud 工具 (gcloud) 而不是 Firebase 工具来部署函数,但您将无法使用 firebase-functions 及其 TypeScript 绑定。
或者,您可以延迟加载模块,而不是在函数的全局范围内静态加载它们,如 this video 中所述。
我不推荐使用 webpack。不值得花时间来配置它。
你可以试试better-firebase-functions, which solves this elegantly by automatically lazy loading only the function that is currently invoked by checking the environment variable FUNCTION_NAME
- see https://link.medium.com/4g3CJOLXidb
我正在使用 Google 带有 TypeScript 的 Firebase Cloud Functions,我发现即使每个函数都是单独部署的,它们都共享相同的包和依赖项,即使某些函数不使用它们也不行导入它们。
就我而言,一个云函数使用 Redis 而其他的则不使用。我有10个功能。 10个函数虽然没有导入,但实际上最终都导入了redis相关代码
由于所有函数共享同一个入口点,index.js。目前看来不可能为每个函数设置单独的 tree-shaking 包/入口点。
这在包大小/冷启动时序/内存/等方面非常低效。这也意味着随着我拥有越来越多的功能,所有功能的包大小将一起增长。它不可扩展。
有没有办法不共享入口点,index.js,并通过使用像 webpack 这样的打包器来完全独立的打包?
您可以为每个应与其他功能隔离部署的功能创建不同的本地 Firebase 工作区(firebase init
)。您必须指示 CLI 不要使用 --only functions:yourFunctionName
来部署它来覆盖部署中的其他功能。
或者,您可以使用 Cloud 工具 (gcloud) 而不是 Firebase 工具来部署函数,但您将无法使用 firebase-functions 及其 TypeScript 绑定。
或者,您可以延迟加载模块,而不是在函数的全局范围内静态加载它们,如 this video 中所述。
我不推荐使用 webpack。不值得花时间来配置它。
你可以试试better-firebase-functions, which solves this elegantly by automatically lazy loading only the function that is currently invoked by checking the environment variable FUNCTION_NAME
- see https://link.medium.com/4g3CJOLXidb