I'm working with firebase functions and arrived to hundreds of functions, and now it is very hard to manage it in single index.js
file as shown in their lots of examples
I tried to split that functions in multiple files like:
--firebase.json
--functions
--node_modules
--index.js
--package.json
--app
--groupFunctions.js
--authFunctions.js
--storageFunctions.js
In this structure i divide my functions in three categories and put in that three files groupFunctions.js
, authFunctions.js
, and storageFunctions.js
. I then tried to import thise files in index.js
, but I don't know why it is not working for me.
Here is 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...
//...
})
}
Here is index.js
file:
var functions = require('firebase-functions');
module.exports = require("./app/groupFunctions")();
My editor not giving any warning in this code. But when I deploy this code with firebase deploy --only functions
, it does not deploy function. If some functions already exist on firebase console, it remove all functions on deploy.
here is deployment logs:
question is also asked on github
Working code example:
file structure:
--firebase.json
--functions
--node_modules
--index.js
--package.json
--src
--groupFunctions.js
--authFunctions.js
--storageFunctions.js
index.js
file:
require('./src/groupFunctions.js')(exports);
require('./src/authFunctions.js')(exports);
require('./src/storageFunctions.js')(exports);
groupFunctions.js
file:
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...
//...
})
}
The full working code is located at https://github.com/malikasinger1/firebase-functions-with-typescript and it's written with cutting edge tech like typescript and webpack. You may use this as a boilerplate/starter.
You can pass the exports
object to the function in groupFunctions.js
, like this:
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...
//...
})
}
Now, in index.js
:
var functions = require('firebase-functions');
require("./app/groupFunctions")(module.exports);
The way it works is that modules.exports
is a regular JavaScript object, so you can add new properties to that from wherever you want.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With