J'essayais d'utiliser Node version 6.2.1 avec une partie de mon code. Nous avions prévu de migrer la plupart des codes orientés hyper-callback vers quelque chose de plus propre et peut-être plus performant.
Je ne sais pas pourquoi, le terminal génère une erreur lorsque j'essaie d'exécuter le code de noeud.
helloz.js
(async function testingAsyncAwait() {
await console.log("Print me!");
})();
Journaux -
BOZZMOB-M-T0HZ:rest bozzmob$ node helloz.js
/Users/bozzmob/Documents/work/nextgennms/rest/helloz.js:1
(function (exports, require, module, __filename, __dirname) { (async function testingAsyncAwait() {
^^^^^^^^
SyntaxError: Unexpected token function
at Object.exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:513:28)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Function.Module.runMain (module.js:575:10)
at startup (node.js:160:18)
at node.js:456:3
BOZZMOB-M-T0HZ:rest bozzmob$ node -v
v6.2.1
Qu'est-ce que je rate? S'il vous plaît jetez-moi un peu de lumière sur la même chose.
Mise à jour 1:
J'ai essayé d'utiliser Babel comme le suggérait Quentin. Cependant, l'erreur suivante persiste.
Code mis à jour -
require("babel-core/register");
require("babel-polyfill");
(async function testingAsyncAwait() {
await console.log("Print me!");
})();
Journaux -
BOZZMOB-M-T0HZ:rest bozzmob$ babel helloz.js > helloz.trans.js
SyntaxError: helloz.js: Unexpected token (3:7)
1 | require("babel-polyfill");
2 |
> 3 | (async function testingAsyncAwait() {
| ^
4 | await console.log("Print me!");
5 | })();
Les fonctions asynchrones sont non prises en charge par Node versions antérieures à la version 7.6 .
Vous devrez transpiler votre code (par exemple, en utilisant Babel ) vers une version de JS que Node comprend si vous utilisez une version plus ancienne.
Cela dit, la version actuelle (2018) LTS de Node.js est 8.x; par conséquent, si vous utilisez une version antérieure, vous devez absolument envisager la mise à niveau.
Nodejs supporte async/wait à partir de la version 7.6.
Publication du message: https://v8project.blogspot.com.br/2016/10/v8-release-55.html
Node.JS ne supporte pas complètement ES6 actuellement, vous pouvez donc utiliser le module asyncawait ou le transpile le utilisant Bable.
installer
npm install --save asyncawait
helloz.js
var async = require('asyncawait/async');
var await = require('asyncawait/await');
(async (function testingAsyncAwait() {
await (console.log("Print me!"));
}))();
Si vous venez d’essayer, vous pouvez utiliser l’outil de ligne de commande babel-node
pour essayer les nouvelles fonctionnalités de JavaScript.
Installez babel-cli
dans votre projet
$ npm install --save-dev babel-cli
Installer les presets
$ npm install --save-dev babel-preset-es2015 babel-preset-es2017
Configurez vos presets babel
Créez .babelrc
dans le dossier racine du projet avec le contenu suivant:
{ "presets": ["es2015","es2017"] }
Exécutez votre script avec babel-node
$ babel-node helloz.js
Ce n'est que pour le développement et les tests, mais cela semble être ce que vous faites. En fin de compte, vous voudrez configurer Webpack (ou quelque chose de similaire) pour transpiler tout votre code pour la production.
Si vous voulez exécuter le code ailleurs, webpack peut vous aider et voici la configuration la plus simple que j'ai pu trouver:
node v6.6.0
Si vous utilisez simplement en développement. Tu peux le faire:
npm i babel-cli babel-plugin-transform-async-to-generator babel-polyfill --save-dev
le package.json
serait comme ceci:
"devDependencies": {
"babel-cli": "^6.18.0",
"babel-plugin-transform-async-to-generator": "^6.16.0",
"babel-polyfill": "^6.20.0"
}
créez le fichier .babelrc
et écrivez ceci:
{
"plugins": ["transform-async-to-generator"]
}
et ensuite, lancez votre script async/await
comme ceci:
./node_modules/.bin/babel-node script.js
Bien que j'arrive tard, ce qui a fonctionné pour moi a été d'installer le plugin transform-async-generator et transform-runtime :
npm i babel-plugin-transform-async-to-generator babel-plugin-transform-runtime --save-dev
le package.json
serait comme ceci:
"devDependencies": {
"babel-plugin-transform-async-to-generator": "6.24.1",
"babel-plugin-transform-runtime": "6.23.0"
}
créez le fichier .babelrc
et écrivez ceci:
{
"plugins": ["transform-async-to-generator",
["transform-runtime", {
"polyfill": false,
"regenerator": true
}]
]
}
puis codage heureux avec async/await
inclure et spécifier la version la plus récente du moteur de noeud, par exemple, j’ai ajouté la version 8.
{
"name": "functions",
"dependencies": {
"firebase-admin": "~7.3.0",
"firebase-functions": "^2.2.1",
},
"engines": {
"node": "8"
},
"private": true
}
dans le fichier suivant
package.json