无法从导出的 firebase 函数中引用未导出的 firebase 函数

Posted

技术标签:

【中文标题】无法从导出的 firebase 函数中引用未导出的 firebase 函数【英文标题】:Unable to reference unexported firebase function from within an exported firebase function 【发布时间】:2020-12-28 15:19:21 【问题描述】:

最近我通过参考another SO post 来构建我的firebase 函数,以便目录具有更加模块化的方法。

因此firebase目录结构是

index.js
|
modules/
├── enterprise
│ ├── getCompanyLicenseUsers.js
│ ├── index.js
│ └── revokeLicense.js
├── premium
│ ├── applyLicense.js
│ ├── getCouponDiscount.js
│ ├── index.js
│ ├── processPaypalPayment.js
│ └── unlockPremium.js
└── utils
├── index.js
└── utilityFunctions.js

不同模块中的所有文件(utils 除外)都单独导出为最上面的 index.js 中的 firebase 函数。每个模块的 index.js 都会对每个函数进行全局导出。

示例函数 getCompanyLicenseUsers

require('../utils');
const functions = require("firebase-functions");

module.exports.getCompanyLicenseUsers = () => 
  return functions.https.onCall((data, context) => 
    // function code
  )


index.js模块,该函数是其中的一部分

global.getCompanyLicenseUsers =  require('./getCompanyLicenseUsers').getCompanyLicenseUsers
global.revokeLicense =  require('./revokeLicense').revokeLicense

(最外层)index.js

// Module imports 
require('./modules/enterprise')
require('./modules/notifications')
require('./modules/premium')
require('./modules/jobs')

// exporting firebase functions
exports.getCompanyLicenseUsers = getCompanyLicenseUsers();
exports.revokeLicense = revokeLicense();

exports.applyLicense = applyLicense();
exports.getCouponDiscount = getCouponDiscount();
exports.processPaypalPayment = processPaypalPayment();
exports.unlockPremium = unlockPremium();

现在我想添加另一个模块,但不是该模块的所有功能都需要导出。这些未导出的函数被导入到将从该模块导出的函数中。

我能够成功部署该函数,但是每当在 firebase 上执行此导出函数时,在导出函数内部调用但未显式导出到 firebase 的函数都会出现引用错误(但它们是其中的一部分导出函数的模块)。

我想我可以将这些单独的功能作为它们自己的模块,但我不想这样做,因为这样代码看起来有点过度组织。

感谢您阅读整个问题,如果您阅读了。非常感谢任何帮助

【问题讨论】:

【参考方案1】:

我的代码库中有近 30 多个函数,并组织在一个项目中(也改进了冷启动性能)。

这是最简化的https://***.com/a/47361132/1212903

请参考(虽然它使用打字稿,但它会让您了解如何更好地处理它) https://medium.com/firebase-developers/organize-cloud-functions-for-max-cold-start-performance-and-readability-with-typescript-and-9261ee8450f0

【讨论】:

以上是关于无法从导出的 firebase 函数中引用未导出的 firebase 函数的主要内容,如果未能解决你的问题,请参考以下文章

尝试将数据从我的 firebase 数据导出到 csv 文件给出未定义

如何在 Firebase Cloud 函数中调用导出的 https Firebase Cloud 函数?

发布我的应用的新版本后,Firebase 数据未导出到 BigQuery

使用Curl从firebase导出大型json数据的问题

dll导出函数参数可以是引用吗

使用导出函数时无法读取未定义的属性