16
votes

Impossible de tester les fonctions cloud localement, l'émulateur ne démarre pas avec TypeError: _onRequestWithOpts n'est pas une fonction

Lorsque j'essaie de démarrer le shell pour des tests locaux à partir du répertoire des fonctions de mon projet, l'émulateur démarre mais mes fonctions ne peuvent pas être chargées.

Lorsque j'exécute "npm run build", je ne reçois aucune erreur. Qu'est-ce qui se passe?

J'ai essayé de supprimer le répertoire des fonctions et de le créer à nouveau en utilisant le cli firebase-tools mais j'obtiens toujours la même erreur. J'ai également exporté les informations d'identification d'administrateur.

J'utilise la méthode par défaut créée dans le fichier index.ts généré à partir du cli firebase-tools.

✔  functions: Emulator started at http://localhost:5001
âš   TypeError: _onRequestWithOpts is not a function
at Object.httpsProvider._onRequestWithOpts (/usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:278:24)
at Object.httpsProvider.onRequest (/usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:283:34)
at Object.<anonymous> (/Volumes/G-DRIVE mobile USB-C/CLEAN UP/Documents/code_bank/typescript/theincrowdapp/functions/lib/index.js:9:38)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Module.require (internal/modules/cjs/loader.js:690:17)
at require (internal/modules/cjs/helpers.js:25:18)
âš   We were unable to load your functions code. (see above)
   - It appears your code is written in Typescript, which must be compiled before emulation.
   - You may be able to run "npm run build" in your functions directory to resolve this.

Je m'attends à ce que l'émulateur lance des instances de la fonction pour les tests, mais à la place, je vois cette erreur:

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

admin.initializeApp();
// // Start writing Firebase Functions
// // https://firebase.google.com/docs/functions/typescript
//
export const helloWorld = functions.https.onRequest((request, 
response) => {
 response.send("Hello from Firebase!");
});


3 commentaires

Si vous rencontrez des problèmes avec l'interface de ligne de commande Firebase, postez un problème sur GitHub et non sur Stack Overflow. github.com/firebase/firebase-tools


Je suis également confronté à ce problème après la mise à jour vers la dernière version


Je reçois la même erreur


6 Réponses :


0
votes

Rétrograder la fonction Firebas à la version 3.0.0


0 commentaires

2
votes

J'ai trouvé une erreur dans:

node_modules / firebase-tools / lib / emulator / functionsEmulatorRuntime.js

ligne 276:

const _onRequestWithOpts = httpsProvider._onRequestWithOptions;

devrait être:

const _onRequestWithOpts = httpsProvider._onRequestWithOpts;


0 commentaires

23
votes

Si vous rencontrez cette erreur, exécutez npm install firebase-functions@3.0.2 dans votre répertoire de functions .

Cela sera bientôt corrigé, et vous pouvez suivre ici: https://github.com/firebase/firebase-tools/issues/1480


3 commentaires

Réponse fraîche très fiable. Merci!


Fonctionne parfaitement. Merci!


J'ai dû mettre à jour Firebase-tools vers la dernière version pour que cela fonctionne.



0
votes

Supprimez node_modules puis exécutez npm install , npm install firebase-admin et npm install firebase-functions@3.0.2


0 commentaires

0
votes

J'ai fait face à cette erreur il y a un an et je l'ai encore affrontée hier malgré le fait que j'ai mis à jour firebase-funcitons au dernier.

J'ai également dû mettre à jour firebase-tools avec npm i -g firebase-tools@latest

Et la dernière chose que vous devez faire est de fermer votre ligne de commande / d'ouvrir un nouvel onglet afin que la dernière version soit utilisée

Pour résumer:

  1. npm i firebase-functions@latest

  2. npm i -g firebase-tools@latest

  3. fermer et ouvrir la ligne de commande


0 commentaires

0
votes

J'ai eu le même problème mais je l'ai fait fonctionner avec la dernière version des packages firebase- * en procédant comme suit.

  1. Firebase -> paramètres -> comptes de service "Générer une nouvelle clé privée" et enregistrez votre fichier dans votre répertoire de fonctions. Essayez de lui attribuer un nom tel que "service-account.json".

  2. Sur votre ligne de commande (Mac par exemple) exécutez "export GOOGLE_APPLICATION_CREDENTIALS = <service_account_file_path>"

  3. Modifiez tsconfig.json "strict": false, "noImplicitAny": false, "

  4. Voila!


0 commentaires