我试图使在Firebase函数中处理单独文件更容易,但是,我遇到了两个问题。
首先,我将更具体地说明我要实现的目标:
在我的index.js
中,我使用glob
加载所有以.func.js
结尾的文件,然后在从文件位置生成一个不错的导出名称之后,将它们添加到导出中。
我试图避免需要在每个函数中初始化Admin SDK,
所以我在一个名为admin.js
的js文件中执行该操作,然后导出bucket
和db
。
除此之外,我尝试将functions
添加到admin.js
的导出中。
现在出现问题:
从functions
文件导入admin.js
无效,由于某种原因,它未定义(下面的代码)。我可以通过直接从“ firebase-functions”导入函数来克服此问题,但我很好奇为什么它不起作用。
从admin.js
初始化Admin SDK也不起作用,乍一看,这似乎是可行的,因为代码已部署,但是当事件触发功能时,我会收到错误消息:{{1 }}。
我的代码
index.js
Error: Bucket name not specified or invalid...
admin.js
import './admin';
import glob from 'glob';
import path from 'path';
const files = glob.sync('./**/*.func.js', {cwd: __dirname, ignore: './node_modules/**'});
for (let file of files) {
// Generate nice looking names.
// function in 'storage/assets/funcName.func.js' will be converted to 'storage_assets_funcName'
const dirArray = file.split(path.sep);
dirArray.splice(0, 1); // Remove the first item of the array(contains a dot).
const functionName = dirArray.join('_').replace('.func.js', '');
exports[functionName] = require(file).default;
}
函数示例:
import * as functions from 'firebase-functions'; // Needs to be here even if I dont export it.
import * as admin from 'firebase-admin';
admin.initializeApp();
const db = admin.firestore();
const bucket = admin.storage().bucket();
export default {
functions,
bucket,
db
}