2017-10-11 1 views
-1

J'écris actuellement beaucoup de fonctions Firebase et certaines d'entre elles partagent les mêmes variables et fonctions. Au moment où je copie les coller dans chaque fichier Firebase Functions, car ils sont en silo, mais je ne sais pas quelle serait la meilleure pratique pour partager le code entre eux? Pour les variables un fichier de configuration serait cool, pour le code, une classe toutes les fonctions pourraient hériter aussi, mais je ne suis pas sûr de savoir comment le faire nettoyer? Organisation: pour l'instant j'ai un fichier index.js qui fait référence à toutes les fonctions Firebase que j'ai. Chaque Firebase Functions est un fichier JS. C'est la hiérarchie je, pas optimale, ni maintenable ...Comment réutiliser ou factoriser du code?

Exemples

  • Variables: J'ai actuellement d'écrire la clé API de Mailgun dans toute ma Firebase
  • Fonction: getThisProcessDone() que je copie actuellement dans toutes mes fonctions Firebase

Quelqu'un en a déjà eu l'idée? Merci de votre aide! Avoir vos fonctions sous un repo GitHub et les appeler de la branche principale n'est pas une option?

+0

Il y a eu quelques questions à propos de comment modulariser les fonctions Cloud pour Firebase, c'est-à-dire mettre chaque fonction dans son propre module de nœud. Est-ce ce que vous cherchez? –

Répondre

1

Je suis actuellement importais comme ça dans package.json:

{ 
    "name": "functions", 
    "description": "Cloud Functions for Firebase", 
    "dependencies": { 
     "cex-converter": "https://github.com/joaquinperaza/cex-converter/tarball/master" 
     }, 
    "private": true 
} 

vous juste besoin de votre dépendance conde comme require('cex-converter') et vous obtenez la dernière version de votre dépendance et n'a pas besoin de modifier quoi que ce soit pour déployer votre dernière version.

+1

Merci Joaquin, je vais d'abord essayer la solution Kato, puis si elle est assez stable, je vais certainement tout emballer et faire comme vous l'avez dit :) – ibox

3

Pour mes projets Functions, j'ai mis mes ressources réutilisables dans functions/lib et les ai normalement utilisées comme modules npm. J'ai également séparé le code utilisé dans les fonctions des définitions, ce qui aide à tester.

Par exemple, considérons cette structure:

functions/ 
|-index.js 
|-newWidget.function.js 
|-lib/ 
| |-Widget.js 
test/ 
|-newWidget.functions.spec.js 

Maintenant, si je veux déclarer un élément déclencheur pour gérer de nouveaux widgets, je fais quelque chose comme ce qui suit:

// functions/index.js: 
const functions = require('firebase-functions'); 
exports.processNewWidget = functions.https.onRequest(require('./newWidget.function.js').process); 

// functions/newWidget.function.js 
exports.process = function(req, res) { 
    res.send('Hello world!'); 
}; 

// test/newWidget.function.spec.js 
// Note how we can easily test our widget processor separate from 
// the third-party dependencies! 
const newWidget = require('../functions/newWidget.function.js'); 

describe('newWidget',() => { 
    describe('process',() => { 
    it('should send hello world', function() { 
     const req = {}; 
     cost res = { send:() => {} }; 
     spyOn(res.send); 
     newWidget.process(req, res); 
     expect(res.send).toHaveBeenCalledWith('Hello world!'); 
    }); 
    }); 
}); 

, et d'intégrer une classe appelé Widget à l'intérieur de newWidget.functions.js, je fais quelque chose comme ceci:

// functions/lib/Widget.js 
class Widget { 
    constructor(name) { this.name = name; } 
} 

exports.Widget = Widget; 

// functions/newWidget.function.js 
class Widget = require('./lib/Widget').Widget; 

exports.process = function(req, res) => { 
    const widget = new Widget(req.param.name); 
    res.send(widget.name); 
}; 
+0

Merci Kato, je voudrais aller avec votre suggestion, semble pourtant que la syntaxe de classe ne travail. Par exemple quand j'essaye de faire "class Widget = ..." j'ai une erreur "Jeton inattendu =" en construisant :( – ibox

+0

On dirait que vous avez une ancienne version du nœud? – Kato