[javascript] SyntaxError : 예기치 않은 토큰 함수-Async Await Nodejs
내 코드 중 일부와 함께 Node 버전 6.2.1 을 사용하는 실험을했습니다 . 대부분의 하이퍼 콜백 지향 코드를 더 깔끔하고 성능이 더 좋은 코드로 마이그레이션 할 계획이었습니다.
이유는 모르겠지만 노드 코드를 실행하려고하면 터미널에서 오류가 발생합니다.
helloz.js
(async function testingAsyncAwait() {
await console.log("Print me!");
})();
로그
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
내가 무엇을 놓치고 있습니까? 나에게 같은 빛을 좀 던져주세요.
업데이트 1 :
Quentin이 제안한대로 Babel을 사용하려고했지만 여전히 다음과 같은 오류가 발생합니다.
업데이트 된 코드
require("babel-core/register");
require("babel-polyfill");
(async function testingAsyncAwait() {
await console.log("Print me!");
})();
로그
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 | })();
답변
비동기 함수는 버전 7.6 이전의 Node 버전에서 지원되지 않습니다 .
이전 버전을 사용하는 경우 Node가 이해하는 JS 버전으로 코드 (예 : Babel 사용 ) 를 트랜스 파일해야합니다 .
즉, Node.js 의 현재 (2018) LTS 버전은 8.x이므로 이전 버전을 사용하는 경우 업그레이드를 매우 강력하게 고려해야합니다.
답변
Nodejs는 버전 7.6부터 async / await를 지원합니다.
출시 게시물 : https://v8project.blogspot.com.br/2016/10/v8-release-55.html
답변
Node.JS는 현재 ES6을 완전히 지원하지 않으므로 asyncawait 모듈을 사용 하거나 Bable 을 사용하여 트랜스 파일 할 수 있습니다 .
설치
npm install --save asyncawait
helloz.js
var async = require('asyncawait/async');
var await = require('asyncawait/await');
(async (function testingAsyncAwait() {
await (console.log("Print me!"));
}))();
답변
실험 중이라면 babel-node
명령 줄 도구를 사용 하여 새로운 JavaScript 기능을 사용해 볼 수 있습니다.
-
babel-cli
프로젝트에 설치$ npm install --save-dev babel-cli
-
사전 설정 설치
$ npm install --save-dev babel-preset-es2015 babel-preset-es2017
-
바벨 사전 설정 설정
.babelrc
다음 내용으로 프로젝트 루트 폴더에 만듭니다 .{ "presets": ["es2015","es2017"] }
-
다음으로 스크립트 실행
babel-node
$ babel-node helloz.js
이것은 개발과 테스트를위한 것이지만 당신이하는 일인 것 같습니다. 결국 모든 코드를 프로덕션 용으로 트랜스 파일하기 위해 웹팩 (또는 이와 유사한 것)을 설정하고 싶을 것입니다.
- babel-node 샘플 코드 : https://github.com/stujo/javascript-async-await/tree/15abac
다른 곳에서 코드를 실행하려면 webpack이 도움이 될 수 있으며 여기에 제가 해결할 수있는 가장 간단한 구성이 있습니다.
답변
node v6.6.0
개발에 사용하는 경우. 다음과 같이 할 수 있습니다.
npm i babel-cli babel-plugin-transform-async-to-generator babel-polyfill --save-dev
다음 package.json
과 같습니다.
"devDependencies": {
"babel-cli": "^6.18.0",
"babel-plugin-transform-async-to-generator": "^6.16.0",
"babel-polyfill": "^6.20.0"
}
.babelrc
파일을 만들고 다음 과 같이 작성하십시오.
{
"plugins": ["transform-async-to-generator"]
}
그런 다음 다음 async/await
과 같이 스크립트를 실행하십시오 .
./node_modules/.bin/babel-node script.js
답변
늦게 왔지만 저에게 효과가 있었던 것은 transform-async-generator 및 transform-runtime 플러그인을 다음과 같이 설치하는 것이 었습니다 .
npm i babel-plugin-transform-async-to-generator babel-plugin-transform-runtime --save-dev
다음 package.json
과 같습니다.
"devDependencies": {
"babel-plugin-transform-async-to-generator": "6.24.1",
"babel-plugin-transform-runtime": "6.23.0"
}
.babelrc
파일을 만들고 다음 과 같이 작성하십시오.
{
"plugins": ["transform-async-to-generator",
["transform-runtime", {
"polyfill": false,
"regenerator": true
}]
]
}
그리고 행복한 코딩 async/await
답변
노드 엔진 버전을 최신 버전으로 포함하고 지정합니다. 이번에는 버전 8을 추가했습니다.
{
"name": "functions",
"dependencies": {
"firebase-admin": "~7.3.0",
"firebase-functions": "^2.2.1",
},
"engines": {
"node": "8"
},
"private": true
}
다음 파일에서
package.json