Firebase-tools: firebase.json 'functions.ignore' 膨胀包上传

创建于 2019-08-15  ·  3评论  ·  资料来源: firebase/firebase-tools

不要删除 validate_template=true template_path=.github/ISSUE_TEMPLATE/bug_report.md 感谢您为 Firebase 社区做出贡献! md5-cd82511516d4d120ac6f38b938897bc8 是的,我们绝对不完美! 请使用此模板并在打开问题时包含一个最小的重现。 如果您知道如何解决问题,请创建一个拉取请求,我们很乐意对其进行审核! md5-d1dc1414712186318d009e8257a27e48 太好了,我们喜欢听到如何改进我们的产品! 但是,请勿使用此模板提交功能请求。 请将您的功能请求提交至:https://firebase.google.com/support/contact/bugs-features/md5-a11e3d9ea91af19a593bf84612124e1a 我们得到了很多,我们很乐意为您提供帮助,但 GitHub 不是他们的最佳去处,他们将被关闭。 请先看一下指南:https://firebase.google.com/docs/cli/ 如果官方文档没有帮助,请尝试通过我们的官方支持渠道询问:https://firebase.google.com/支持/检查社区解决方案或帮助的其他位置:- Stack Overflow:https://stackoverflow.com/ - Firebase Slack 社区:https://firebase.community/ *请避免跨多个渠道重复发布!*

环境信息


firebase 工具:

firebase --version
7.2.2


平台:
MacOS (10.14.6 (18G87)) 和 Windows 10 开发环境。

测试用例


MCVE:Firebase 函数模板 + firebase.json中的“functions.ignore”部分

重现步骤

创建一个火力基地项目。

使用默认选项运行 firebase init 函数,并将其添加到您的新项目中:

firebase init functions

取消注释index.js中的 helloWorld 示例函数并部署:

⋊> ~/D/f/functions firebase deploy                                                                                    11:02:38

=== Deploying to 'test-function-deploy-3a957'...

i  deploying functions
i  functions: ensuring necessary APIs are enabled...
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (22.95 KB) for uploading
✔  functions: functions folder uploaded successfully
i  functions: updating Node.js 8 function helloWorld(us-central1)...
✔  functions[helloWorld(us-central1)]: Successful update operation. 

✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/test-function-deploy-3a957/overview
⋊> ~/D/f/functions

请注意部署的打包函数大小 (22.95KB)。

编辑firebase.json以包含“functions.ignore”部分:

{
  "functions": {
    "ignore": []
  }
}

再次部署:

⋊> ~/D/f/functions firebase deploy                                                                                    11:03:24

=== Deploying to 'test-function-deploy-3a957'...

i  deploying functions
i  functions: ensuring necessary APIs are enabled...
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (9.07 MB) for uploading
✔  functions: functions folder uploaded successfully
i  functions: updating Node.js 8 function helloWorld(us-central1)...
✔  functions[helloWorld(us-central1)]: Successful update operation. 

✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/test-function-deploy-3a957/overview
⋊> ~/D/f/functions 

请注意,已部署的包已从 22.95 KB增长到 9.07 MB

预期行为

我希望如果忽略某些事情,部署的包会变得更小而不是更大。

实际行为

部署的包大小增加了几个数量级,从 22.95KB 增加到 9.07MB。

作为参考,在这种情况下,包括本地node_modules在内的functions文件夹的大小为 29MB。 node_modules文件夹本身在磁盘上是 28.9MB,压缩后约为 6MB。

这也会影响 TypeScript 项目,大概是因为问题是在tsc部分之后触发的。

评论

对于firebase.json配置文件,特别是functions部分,我还没有找到任何好的/权威文档。 这里有一些hosting部分文档。 我对functions.ignore结构/用法的理解目前基于https://github.com/firebase/firebase-tools/issues/291#issuecomment -322526710。

有一个相关的问题 #429, @laurenzlong指出ignore部分应该是可操作的/已修复的。

开放式问题

在部署之前,已部署的包在哪里构建到本地? 我使用 --debug 运行,但找不到任何有用的文件路径。

谢谢!

感谢您考虑! 我的手机网络共享数据计划感谢您解决此问题,因为在我弄清楚发生了什么之前,我当前的项目部署约为 55MB :)

最有用的评论

您描述的行为是我所期望的行为。

正如您所指出的,文档没有描述functions.ignore ; 但是,它由 CLI 使用

非正式地(因为它是_undocumented_), firebase.ignore的默认值为["node_modules"] 。 这让我们可以限制在部署期间我们必须上传的东西的数量(你可以想象它可能会变得非常大,非常快)。 通过在package.json $ 中设置firebase.ignore $ ,它告诉 CLI _nothing_ 应该被忽略。 现在, node_modules文件夹包含在存档中并发送到 Functions。

回答您的问题:在流程的高级描述中,CLI 不会在本地构建包。 它大致执行以下操作:

  1. 为函数运行任何预部署脚本(也在firebase.json中指定)。
  2. 解析要部署的函数的源代码。
  3. 压缩源代码(通常忽略node_modules )并将其上传到 Functions。

上传源代码后,Functions 基础架构会为package.json运行npm install ,并且源代码已准备好为用户提供服务(至少,在这个超级手动的解释中)。

我希望这能回答你的问题。 但是由于这里没有与 CLI 相关的错误,我将关闭此问题。

所有3条评论

您描述的行为是我所期望的行为。

正如您所指出的,文档没有描述functions.ignore ; 但是,它由 CLI 使用

非正式地(因为它是_undocumented_), firebase.ignore的默认值为["node_modules"] 。 这让我们可以限制在部署期间我们必须上传的东西的数量(你可以想象它可能会变得非常大,非常快)。 通过在package.json $ 中设置firebase.ignore $ ,它告诉 CLI _nothing_ 应该被忽略。 现在, node_modules文件夹包含在存档中并发送到 Functions。

回答您的问题:在流程的高级描述中,CLI 不会在本地构建包。 它大致执行以下操作:

  1. 为函数运行任何预部署脚本(也在firebase.json中指定)。
  2. 解析要部署的函数的源代码。
  3. 压缩源代码(通常忽略node_modules )并将其上传到 Functions。

上传源代码后,Functions 基础架构会为package.json运行npm install ,并且源代码已准备好为用户提供服务(至少,在这个超级手动的解释中)。

我希望这能回答你的问题。 但是由于这里没有与 CLI 相关的错误,我将关闭此问题。

感谢@bkendall 的信息。

基于#291,我错误地认为 CLI _always_ 排除了 node_modules,并且functions.ignore中的内容是附加的。 为 node_modules 添加显式模式确实可以满足您的描述。

@bkendall为什么不记录它?

此页面是否有帮助?
0 / 5 - 0 等级