私はfirebase関数を使用していて、何百もの関数に到達しましたが、多くの例に示されているように、単一のindex.js
ファイルで管理するのは非常に困難です。
私はその関数を次のような複数のファイルに分割しようとしました:
--firebase.json
--functions
--node_modules
--index.js
--package.json
--app
--groupFunctions.js
--authFunctions.js
--storageFunctions.js
この構造では、関数を3つのカテゴリに分割し、その3つのファイルgroupFunctions.js
、authFunctions.js
、およびstorageFunctions.js
に入れます。次に、thiseファイルをindex.js
にインポートしようとしましたが、なぜそれが機能しないのかわかりません。
これがgroupFunctions.js
です
var functions = require('firebase-functions');
module.exports = function(){
exports.onGroupCreate = functions.database.ref('/groups/{groupId}')
.onWrite(event => {
console.log(`A group is created in database named:${event.params.groupId}.`);
// some logic...
//...
})
}
これがindex.js
ファイルです:
var functions = require('firebase-functions');
module.exports = require("./app/groupFunctions")();
私の編集者はこのコードで警告を出していません。しかし、このコードをfirebase deploy --only functions
でデプロイすると、関数がデプロイされません。一部の関数がFirebaseコンソールにすでに存在する場合、デプロイ時にすべての関数が削除されます。
質問も github
実用的なコード例:
ファイル構造:
--firebase.json
--functions
--node_modules
--index.js
--package.json
--src
--groupFunctions.js
--authFunctions.js
--storageFunctions.js
index.js
ファイル:
require('./src/groupFunctions.js')(exports);
require('./src/authFunctions.js')(exports);
require('./src/storageFunctions.js')(exports);
groupFunctions.js
ファイル:
var functions = require('firebase-functions');
module.exports = function (e) {
e.onGroupCreate = functions.database.ref('/groups/{groupId}')
.onWrite(event => {
console.log(`A group is created in database named:${event.params.groupId}.`);
// some logic...
//...
})
}
完全に機能するコードは https://github.com/malikasinger1/firebase-functions-with-TypeScript にあり、TypeScriptやwebpackなどの最先端の技術で書かれています。これをボイラープレート/スターターとして使用できます。
次のように、exports
オブジェクトをgroupFunctions.js
の関数に渡すことができます。
var functions = require('firebase-functions');
module.exports = function (e) {
e.onGroupCreate = functions.database.ref('/groups/{groupId}')
.onWrite(event => {
console.log(`A group is created in database named:${event.params.groupId}.`);
// some logic...
//...
})
}
さて、index.js
で:
var functions = require('firebase-functions');
require("./app/groupFunctions")(module.exports);
modules.exports
は通常のJavaScriptオブジェクトであるため、どこからでも新しいプロパティを追加できます。
ファイル内の複数の関数のサポートが必要な場合、この要点はそれを行う方法の実際の例を示しています
https://Gist.github.com/saintplay/3f965e0aea933a1129cc2c9a823e74d7#file-index-js
*.function.js
ごとに関数を動的にインポートできます
//index.js
const glob = require('glob')
const files = glob.sync('./**/*.functions.js', { cwd: __dirname,
ignore: './node_modules/**' })
files.forEach(file => {
const functionModule = require(file)
const functionNames = Object.keys(functionModule)
functionNames.forEach(functionName => {
if (!process.env.FUNCTION_NAME || process.env.FUNCTION_NAME ===
functionName) {
exports[functionName] = functionModule[functionName]
}
})
})
//Example Home.functions.js :
exports.Home = functions.https..