web-dev-qa-db-fra.com

Le déploiement de Cloud Functions échoue: "La fonction a échoué lors du chargement du code utilisateur. Message d'erreur: le code du fichier lib / index.js ne peut pas être chargé."

J'ai mis à niveau mon module de fonctions Firebase vers 3.0.1. Maintenant, lorsque je déploie des fonctions cloud, je reçois le message d'avertissement:

⚠ fonctions: Déploiement de fonctions vers Node 6 runtime, qui est déconseillé. Node 8 est disponible et est le runtime recommandé).

Ensuite, le déploiement échoue avec ceci:

Function failed on loading user code. Error message: Code in file lib/index.js can't be loaded.
Is there a syntax error in your code?
Detailed stack trace: /user_code/node_modules/firebase-functions/lib/providers/https.js:282
    const func = async (req, res) => {
                       ^

SyntaxError: Unexpected token (
    at createScript (vm.js:56:10)
    at Object.runInThisContext (vm.js:97:10)
    at Module._compile (module.js:549:28)
    at Object.Module._extensions..js (module.js:586:10)
    at Module.load (module.js:494:32)
    at tryModuleLoad (module.js:453:12)
    at Function.Module._load (module.js:445:3)
    at Module.require (module.js:504:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/user_code/node_modules/firebase-functions/lib/index.js:39:15)

Comment puis-je réparer cela?

10
Doug Stevenson

Dans le passé, le nœud 6 était le runtime cible par défaut. Maintenant, le nœud 6 a expiré LTS (Long Term Support). Avec CLI version 6.8.0, le nœud 6 était obsolète et vous avez été encouragé à cibler le nœud 8 pour le déploiement à la place. Maintenant, en commençant par [email protected], la prise en charge du nœud 6 est entièrement supprimée et vous devez cibler explicitement le nœud 8 dans votre package.json:

{
  // other configurations here…
  "dependencies": {
  },
  // Add an “engines” child to choose a node version, here it’s node 8.
  "engines": {
    "node": "8"
  }
}

Un autre changement connexe dans cette version est une dépendance à l'égard de firebase-admin 8.x, qui supprime également la prise en charge du nœud 6.

Le message d'erreur lui-même indique que le mot clé async n'est pas reconnu, ce qui n'est pas pris en charge par le nœud 6.

12
Doug Stevenson