如何将功能从一个 firebase 项目导入另一个 firebase 项目?
Posted
技术标签:
【中文标题】如何将功能从一个 firebase 项目导入另一个 firebase 项目?【英文标题】:How do I import the functions from a one firebase project into another firebase project? 【发布时间】:2020-11-23 01:58:40 【问题描述】:我有 2 个 firebase 功能项目:prod
和 infra
。 infra
需要 prod
的所有功能,并且有更多自己的功能(即infra
是prod
的严格超集)。目录结构大致是:
|---> myDirectory
|---> infra
| |---> functions
| |---> src
| |---> index.js // infra is TS
|---> prod
|---> functions
|---> index.js // prod is JS
如何将函数从prod
导入infra
?我试过了
// myDirectory/infra/functions/index.js
const functionA = require('../../prod/functions/index.js');
exports.functionA = functionA;
这在模拟器上运行良好,但在部署时出现此错误:
validateEventDocument
Provided module can't be loaded.
Did you list all required modules in the package.json dependencies?
Detailed stack trace: Error: Cannot find module '../../../prod/functions/index.js'
【问题讨论】:
在 Stack Overflow 上,请不要显示文字图片。将文本复制到问题本身,以便阅读、复制和搜索。 【参考方案1】:如果这两个文件位于不同位置且名称相同,这可能会导致您的导入出现问题。因此,我建议您至少为文件使用不同的名称,因为所有目录结构都是相同的。正如在其他类似案例here 中所阐明的那样,您导入的方式基本上是正确的,但是您的结构无助于将云功能导入到您的项目中。我建议您将其更改为以下内容,然后尝试导入它们。
|---> myDirectory
|---> infra
| |---> i_functions
| | |---> f_index.js
|---> prod
| |---> p_functions
| | |---> p_index.js
// myDirectory/infra/functions/index.js
const functionA = require('../../prod/p_functions/p_index.js');
exports.functionA = functionA;
您可能还想检查您的firebase.json
文件,以确认它是否已配置为指示您需要的云功能。
除此之外,以下两个类似案例可能会为您提供一些关于如何更好地组织和构建不同 Cloud Functions 文件的见解。
Firebase Function import function from other file - javascript Declare separate Firebase Cloud Functions and still use Express.js如果这些信息对您有帮助,请告诉我!
【讨论】:
澄清一下,我的项目实际上被称为prod
和infra
。我不知道为什么我选择在 Stack Overflow 上将其展示为生产。让我编辑这个问题以澄清那个误导性的细节。让我也尝试重命名索引文件,看看是否可行
重命名索引文件不起作用。我认为根本原因是因为infra
有自己的package.json、.firebaserc和firebase.json,所以我运行firebase deploy
时,没有上传myDirectory/prod/functions/index.js
的代码。 This article on requiring local modules 很有希望,但不是很清楚。你知道我在哪里可以找到更多关于需要本地模块的信息吗?
嗨@MinhLam 感谢您确认索引。事实上,您的firebase.json
是您需要检查的重要文件——我以为您已经检查过了。除此之外,我认为它与本地模块无关,因为这是一个不同的功能。如果您认为我的回答有帮助,请考虑点赞。
请注意,Firebase CLI 不会在其函数文件夹之外部署任何内容。部署后它不会合并文件夹源中的内容。所有代码都必须在其中,或者来自 node_modules(仅来自一个项目),或者在 package.json 中定义了一些明确的源代码。
@DougStevenson 没错,这就是我发现的。我希望它自动执行此操作,但我现在唯一能做的似乎就是重组目录系统。以上是关于如何将功能从一个 firebase 项目导入另一个 firebase 项目?的主要内容,如果未能解决你的问题,请参考以下文章