为Firebase组织云功能

时间:2019-07-18 13:46:39

标签: firebase google-cloud-functions

我想组织我的firestore云功能,以便将每个功能放在单独的文件中,我发现了一篇很棒的文章here 我用这个代码

const files = glob.sync('./**/*.f.js', { cwd: __dirname, ignore: './node_modules/**' })
for (let f = 0, fl = files.length; f < fl; f++) {
    const file = files[f]
    const functionName = camelCase(file.slice(0, -5).split('/').join('_')) // Strip off '.f.js'
    if (!process.env.FUNCTION_NAME || process.env.FUNCTION_NAME === functionName) {
        console.log(functionName+": "+file)
        // tslint:disable-next-line: no-var-requires
        exports[functionName] = require(file)
    }
}

我以这种方式组织了函数并可以正常工作,但是在控制台中显示了一些我不理解为什么发生的东西。

控制台中的

显示每个功能被多次导出

例如,在部署时,我在dbID文件夹中有2个功能,它显示了类似的内容

https://i.stack.imgur.com/sUrNW.png

如果您看到每个函数还导出其他目录中的所有其他函数

我的问题是这会造成问题吗?或任何性能问题?还是任何更好的方式来组织功能而不进行分组?

谢谢

3 个答案:

答案 0 :(得分:0)

您正在查看的只是代码中console.log()的输出。对于在函数的全局范围内执行的所有代码,将对index.js中执行的每个函数执行。如果您不想在日志中看到该输出,只需删除对console.log()的调用即可。

答案 1 :(得分:0)

我编写了一个简单的模块/ npm软件包,名为better-firebase-functions

只需npm i better-firebase-functions,然后:

import exportCloudFunctions from 'better-firebase-functions'
exportCloudFunctions(__dirname, __filename, exports, './', './**/*.js')

它会自动执行所有操作,并加快冷启动速度,而您无需担心实现细节。

请阅读文档,以获取有关如何组织功能文件(在TS中为export default和在JS中为module.exports.default =)的详细信息,因为该功能可能会在编写本文时发生变化。

答案 2 :(得分:0)

如果您要部署到 Node 10,您可能需要更改您的语句以包含新的环境变量。 FUNCTION_TARGET 而不是 FUNCTION_NAME

https://cloud.google.com/functions/docs/env-var#nodejs_10_and_subsequent_runtimes

<块引用>

与 Cloud Functions 支持的以前的运行时相比,Node.js 10 运行时自动设置的环境变量更少。

if (!process.env.FUNCTION_TARGET || process.env.FUNCTION_TARGET === functionName) {
    console.log(functionName+": "+file)
    // tslint:disable-next-line: no-var-requires
    exports[functionName] = require(file)
}