私は自分のコードでNode version 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バージョンではサポートされていません 。
あなたはあなたのコードを(例えば Babel を使って)あなたが古いバージョンを使っているならNodeが理解できるバージョンのJSに変換する必要があるでしょう。
とはいえ、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 moduleまたは transpile を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
これは開発とテストのためだけのものですが、それはあなたがしていることのようです。結局、webpack(またはそれに似たもの)をセットアップして、すべてのコードを本番用に変換する必要があります。
あなたがどこか他の場所でコードを実行したいのであれば、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 pluginをインストールすることでした:
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