86 votes

Comment configurer des variables d'environnement locales pour les fonctions Cloud Firebase

Je suis en train d'utiliser des fonctions cloud http pour écouter une requête et renvoyer un message simple.

Je développe des fonctions cloud localement en utilisant :

firebase serve --only functions

J'ai configuré quelques variables d'environnement personnalisées en utilisant

firebase functions:config:set

Accéder aux variables de configuration personnalisées en utilisant le code ci-dessous fonctionne bien lorsque le projet est déployé

 functions.config()

mais cela ne fonctionne pas lorsque je développe localement. Lorsque la fonction est déclenchée en accédant à : http://localhost:5002/my-project-name/us-central1/functionName Je ne peux pas accéder aux variables de configuration personnalisées. Lorsque j'utilise functions.config() localement, je vois la configuration par défaut, mais pas mes variables de configuration personnalisées

Existe-t-il une solution alternative ou une meilleure pratique pour les variables d'environnement lorsque je travaille localement?

0 votes

Pouvez-vous être plus spécifique sur ce que vous faites lorsque vous dites que vous développez localement ?

0 votes

@DougStevenson J'ai mis à jour la question. J'espère que cela apporte un peu plus de clarté sur ce que je fais.

0 votes

Je rencontre le même problème. Je vais soumettre un bug en interne à ce sujet (je fais partie de l'équipe Firebase). N'hésitez pas à également laisser un rapport de bug sur firebase.google.com/support/contact/bugs-features

157voto

laurenzlong Points 798

À partir de maintenant, vous devez créer manuellement un fichier .runtimeconfig.json à l'intérieur de votre répertoire de fonctions en exécutant cette commande. Ensuite, exécutez la commande de serveur.

firebase functions:config:get > .runtimeconfig.json

Si vous utilisez Windows Powershell, remplacez le code ci-dessus par :

firebase functions:config:get | ac .runtimeconfig.json

Vous pouvez en apprendre davantage dans https://firebase.google.com/docs/functions/local-emulator

0 votes

Pouvez-vous détailler la configuration locale définie afin de tester la fonction qui envoie des notifications FCM ?

0 votes

Vous ne devriez pas avoir à faire quelque chose de spécial. L'émulateur remplit automatiquement functions.config().firebase avec les bonnes informations de projet. Ainsi, les lignes suivantes fonctionneront localement : const admin = require('firebase-admin'); admin.initializeApp(functions.config().firebase);

0 votes

Et voici un exemple de code pour utiliser FCM au sein d'une fonction : github.com/firebase/functions-samples/blob/master/…

15voto

Muthukumar Points 1102

Pour ceux qui veulent utiliser les variables d'environnement (process.env), je suis ce contournement.

Définir les valeurs de configuration avant le déploiement

firebase functions:config:set envs.db_host=$DB_HOST_PROD envs.db_user=$DB_USER_PROD envs.db_password=$DB_PASSWORD_PROD envs.db_name=$DB_NAME_PROD envs.db_use_ssl=false

Lire la configuration et mettre à jour les variables d'environnement en premier sous votre code de fonctions.

const functions = require('firebase-functions');
const config = functions.config();

// Transfert des envs de la configuration firebase
for (const key in config.envs) {
    process.env[key.toUpperCase()] = config.envs[key];
}

5voto

vinoth10 Points 87

Vous pouvez conserver un fichier appelé .env.json et le charger lorsque vous déclenchez la commande de déploiement

{
  "name": "projet",
  "version": "0.0.0",
  "scripts": {
    "deploy": "npm run env && firebase deploy --only functions",
    "env": "test -f env.json && firebase functions:config:unset env && firebase functions:config:set env=\"$(cat env.json)\" || echo \"Veuillez ajouter le fichier env.json avant de déployer.\""
  },
  "dependencies": {
    "firebase-functions": "^3.1.0"
  },
  "devDependencies": {
    "firebase-functions-test": "^0.1.6"
  }
}

1voto

saran0798 Points 11

J'ai réduit le problème à Windows Powershell.

En exécutant firebase functions:config:get > .runtimeconfig.json dans powershell génère un json corrompu dont je ne sais pas pourquoi, qui, lorsqu'il est analysé, donne une erreur "Unexpected token in JSON at position 0".

J'ai réussi à résoudre le problème en exécutant la commande de génération de .runtimeconfig.json dans l'invite de commandes Windows.

0voto

iRohitBhatia Points 3563

Je ne suis pas sûr si la réponse la mieux notée fonctionne ou non, mais pour la fonction firebase sur Mac (pour servir localement), je fais quelque chose comme ceci

npm run admin-keys && export dev=true && firebase emulators:start

Où les clés admin sont

"admin-keys": "export GOOGLE_APPLICATION_CREDENTIALS='./.keys/admin.keys.json'"

Cela chargera la configuration depuis .runtimeconfig.json

Pour la production, vous devrez le définir manuellement en faisant quelque chose comme ceci

firebase functions:config:set facebookCred.secret="quelquechose"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X