📘
Firebase Functions にてファイルを分割して管理する方法
とりあえずテスト実装ができるまでにかかった時間なんと3時間。
多いのか少ないのか。基本がさっぱり出来ない場合はやっぱりエラーが連発して
どこにどんなエラーがあるのかよく分からない。こんな現象に陥ってしまいます。
ま、とりま動いたので自分用のメモ程度にシェアします。
index.js
const admin = require("firebase-admin");
const serviceAccount = {
...
}
admin.initializeApp({
...
});
const test = require("./test");
module.exports = { test }
test.js
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const _db = admin.firestore();
exports.addMessage = functions.https.onCall((data, context) => {
console.log('hello world');
});
とりあえずは上記のコードと同様にすれば、デプロイする時に問題なくtest.jsもデプロイされます。
ただ、理解はさっぱり出来ていません。
まぁ、exportsってのがtest.jsを使えるようにしているのは何となく理解できますが、
基本がわからないので、まぁ、エクスポートしてるんだろうなぁみたいなノリです。
厄介なエラー
翻訳:デフォルトの Firebase アプリが存在しない。Firebase のサービスを使用する前に、必ず initializeApp() を呼び出してください。
シンプルになんこれ。って感じではありますが色々と調べていると
どうやら、firebaseを使用する場合は先に初期化せんかい!って感じらしいです。
まぁ、そうでしょうけど...。と思っていましたが
結構、このエラーに遭遇して改善できませんでした。
一番の理由は下記のコードからです。
index.js
const admin = require("firebase-admin");
const test = require("./test");
const serviceAccount = {
...
}
admin.initializeApp({
...
});
module.exports = { test }
test.jsでもadmin処理を使用しているのですが、
先にこいつがインポートされてるみたいで、firebaseの処理を初期化する前に参照してるからみたいです。
その結果、上記のエラーが度々発生します。
普通に考えれば一番上の方でimport系は済ましたいのに、
わざわざ初期化の下に書くって考えるとなんそれって感じです。
これを改善するまで、面倒だった・・・
ま、改善したから問題ないけどね。
Discussion