我想组织我的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
如果您看到每个函数还导出其他目录中的所有其他函数
我的问题是这会造成问题吗?或任何性能问题?还是任何更好的方式来组织功能而不进行分组?
谢谢
答案 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)
}