On dirait que Cloud Functions ne prend pas en charge la notation Async-Await. Est-il possible d'utiliser Babel jusqu'à ce qu'ils le fassent ou est-il recommandé d'utiliser des promesses?
Ma fonction actuelle qui se trouve sur Node est comme suit:
exports.getToken = async (req, res) => {
//1. Generate token from Braintree
const result = await gateway.clientToken.generate();
//2. Return the client token
res.json(result.clientToken);
};
Cloud Functions exécute la version LTS de node.js, qui selon la documentation est 6.14.0 à ce moment. Le noeud 6.x supporte EcmaScript 6, qui n'inclut pas async/wait .
Cependant, vous pouvez écrire votre code dans TypeScript et le transpiler en ES5/ES6, ce qui convertira l'utilisation de async/wait en promesses. Une recherche sur le Web suggère que peut-être ce plugin peut être utilisé pour aider Babel à effectuer un transpilage similaire.
Il convient de noter que la CLI de Firebase vous permet désormais d'initialiser un nouveau projet Cloud Functions avec support natif de TypeScript , ce que l'équipe de Firebase recommande actuellement aux développeurs.
Si vous ne souhaitez pas utiliser TypeScript, vous pouvez maintenant également choisir le noeud 8 (actuellement en version bêta et prenant en charge async/wait pour le code JavaScript pur) en tant que cible de déploiement. Vous pouvez suivez la documentation pour éditer votre package.json pour indiquer que vos fonctions doivent être déployées sur le noeud 8.
Maintenant vous pouvez utiliser Node.js version 8 en ajoutant ceci dans votre functions/package.json
:
"engines": {
"node": "8"
}
Au lieu de transpiler TypeScript, j'ai transpilé mon javascript après avoir suivi ceci très joli post et jeter un oeil sur ce référentiel
Fondamentalement, vous pouvez faire:
npm install -g @babel/cli @babel/core @babel/preset-env
UPDATE:
J'ai des problèmes avec la version "7.0.0-beta.51" de Babel. "7.0.0-beta.44" toujours ok.
Passer à la version stable 6
npm installer --save-dev babel-cli babel-preset-env
Créez le fichier .babelrc dans votre dossier de projet
{
"presets": [
["@babel/env", {
"targets": {
"node": "6.11.5"
}
}]
]
}
Déplacez votre dossier "functions" vers le dossier "firebaseFunctions" puis exécutez
babel firebaseFunctions --out-dir functions --copy-files --ignore firebaseFunctions/node_modules
Ou exécutez cette commande pour chaque fichier que vous voulez transpiler
babel originalfile.js --out-file transpiledfile.js
Dans votre functions/.eslintrc.json
Fichier défini comme 'ecmaVersion': 2017
ceci supprimera l'erreur de syntaxe eslint
"parserOptions": {
"ecmaVersion": 2017
},
Dans votre functions/package.json
jeu de fichiers node
version à 8
en ajoutant ci-dessous
"engines": {
"node": "8"
},
cela mettra à jour la version du nœud de nuage à 8 La version du nœud par défaut est 6
Les solutions ci-dessus ne fonctionnaient pas pour moi seul. J'ai dû mettre à jour les derniers outils Firebase:
npm update -g firebase-tools
puis mettez à jour mon package.json en ajoutant:
"engines": {"node": "8"}
et tout a bien fonctionné avec async/wait.
Crédits à ce blog https://howtofirebase.com/cloud-functions-migrating-to-node-8-9640731a8acc