当前位置: 首页 > 知识库问答 >
问题:

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

林铭
2023-03-14

最近,我构造了我的firebase函数,通过参考另一篇so文章,使目录具有更模块化的方法。

因此,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之外)都作为firebase函数单独导出到最上面的index.js中。每个模块的index.js对每个函数进行全局导出。

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

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

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个答案

季城
2023-03-14

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

这是https://stackoverflow.com/A/47361132/1212903的最简化格式

请参阅(虽然它使用了typescript,但它将给您提供如何更好地处理它的想法)https://medium.com/firebase-developers/organize-cloud-functions-for-max-cold-start-performance and-readability with-TypeScript-and-9261EE8450F0

 类似资料:
  • 如何从声明中的另一个函数中调用函数? 我试图从函数中访问函数,得到的结果是: TypeError:对象#没有方法“foo” 如果将更改为,将得到: ReferenceError:未定义foo

  • 我使用Mocha/Chai测试JavaScript前端代码,现在我们切换到TypeScript。我有几个功能要测试。但它们不应该出口。我是否可以在不向这些函数添加的情况下访问这些函数并对其进行测试?

  • 我正在用JavaScript构建firebase函数。现在我有了很多调用间函数,我计划将这些函数移到不同的文件中,以避免index.js变得非常混乱。 下面是当前的文件结构: 我想知道: 1)如何从internalfunctions.js导出函数并导入到index.js。 已编辑 js将具有多种功能。

  • 在index.js,我有: 我从以下地方复制粘贴了代码:https://firebase.google.com/docs/functions/get-started 不知何故,当我使用 我得到: 错误:分析函数触发器时出错。ReferenceError:未在对象上定义函数。(/home/[USERNAME HERE]/functions/index.js:1:87)在模块中_在对象处编译(modu

  • 我正在编写云函数,Firez是这样自动导入的。 但在部署时,错误如下所示。我试着这样做,它部署没有任何错误,但我不确定这是正确的方式与否。 有人知道吗? node_modules/@googlecloud/firestore/types/firestore。d、 ts:28:15-错误TS2300:重复标识符“DocumentData”。 28导出类型DocumentData={[field: s

  • 每当我运行“Firebase部署-只有函数”时,它就会出现这个错误分析函数触发器时出错。 类型错误:函数。https。onCall(…)。那么它就不是对象的函数了。(C:\Users\Lenovo\Desktop\Firebase Revision\functions\index.js:11:4)在模块中_在对象处编译(internal/modules/cjs/loader.js:1158:30)