Eksperymentowałem z użyciem Node w wersji 6.2.1 z częścią mojego kodu. Planował migrację większości kodów zorientowanych na hiper-wywołanie zwrotne do czegoś, co wygląda czyściej i może działa lepiej.
Nie mam pojęcia, dlaczego terminal wyświetla błąd, gdy próbuję wykonać kod węzła.
helloz.js
(async function testingAsyncAwait() {
await console.log("Print me!");
})();
Dzienniki
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
czego mi brakuje? Proszę, rzuć mi trochę światła na to samo.
Aktualizacja 1:
Próbowałem użyć Babel, jak zasugerował Quentin, ale nadal otrzymuję następujący błąd.
Zaktualizowany kod
require("babel-core/register");
require("babel-polyfill");
(async function testingAsyncAwait() {
await console.log("Print me!");
})();
Dzienniki
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 | })();
Odpowiedzi:
Funkcje asynchroniczne nie są obsługiwane przez wersje węzła starsze niż wersja 7.6 .
Będziesz musiał przetransponować swój kod (np. Używając Babel ) do wersji JS, którą Node zrozumie, jeśli używasz starszej wersji.
To powiedziawszy, aktualna (2018) wersja LTS Node.js to 8.x, więc jeśli używasz wcześniejszej wersji, powinieneś bardzo mocno rozważyć aktualizację.
źródło
Nodejs obsługuje async / await od wersji 7.6.
Publikacja: https://v8project.blogspot.com.br/2016/10/v8-release-55.html
źródło
Node.js nie obsługuje w pełni ES6 obecnie, więc można użyć asyncawait moduł lub transpile go za pomocą bable.
zainstalować
helloz.js
źródło
Jeśli dopiero eksperymentujesz, możesz użyć
babel-node
narzędzia wiersza poleceń, aby wypróbować nowe funkcje JavaScriptZainstaluj
babel-cli
w swoim projekcie$ npm install --save-dev babel-cli
Zainstaluj ustawienia wstępne
$ npm install --save-dev babel-preset-es2015 babel-preset-es2017
Skonfiguruj swoje ustawienia Babel
Utwórz
.babelrc
w folderze głównym projektu z następującą zawartością:{ "presets": ["es2015","es2017"] }
Uruchom skrypt z
babel-node
$ babel-node helloz.js
To jest przeznaczone tylko do programowania i testowania, ale wydaje się, że to właśnie robisz. W końcu będziesz chciał skonfigurować pakiet internetowy (lub coś podobnego), aby przetransponować cały kod do produkcji
Jeśli chcesz uruchomić kod w innym miejscu, pakiet webpack może pomóc, a oto najprostsza konfiguracja, jaką mogłem wymyślić:
źródło
node v6.6.0
Jeśli po prostu używasz w rozwoju. Możesz to zrobić:
package.json
byłoby tak:utwórz
.babelrc
plik i napisz to:a następnie uruchom
async/await
skrypt w ten sposób:źródło
Chociaż przychodzę późno, to, co zadziałało, to zainstalowanie transform-async-generator i transform-runtime plugin w następujący sposób:
npm i babel-plugin-transform-async-to-generator babel-plugin-transform-runtime --save-dev
package.json
byłoby tak:utwórz
.babelrc
plik i napisz to:a potem szczęśliwego kodowania z
async/await
źródło
Uwzględnij i określ najnowszą wersję silnika węzła, powiedzmy, że w tym czasie dodałem wersję 8.
w poniższym pliku
źródło
Ja też miałem ten sam problem.
Używałem Node v 6.2 razem z purgecss w moim pliku gulpfile. Problem pojawił się tylko podczas tworzenia nowego projektu Laravel; do tego momentu nigdy nie miałem problemu z purgecss.
Zgodnie z oświadczeniem @ Quentin - jak wersje węzłów wcześniejsze niż 7.6 nie obsługują funkcji asynchronicznych - zdecydowałem się zaktualizować moją wersję węzła do 9.11.2
To zadziałało dla mnie:
1-
2-
usuń „node_modules” z katalogu tras
3-
Nadal nie jestem pewien, jak działał node / purgecss przed aktualizacją… ale to załatwiło sprawę.
źródło