Saya sedang bereksperimen menggunakan Node versi 6.2.1 dengan beberapa kode saya. Memiliki rencana untuk memigrasi sebagian besar kode berorientasi hyper-callback ke sesuatu yang terlihat lebih bersih dan mungkin berkinerja lebih baik.
Saya tidak tahu mengapa, terminal memunculkan kesalahan ketika saya mencoba menjalankan kode node.
helloz.js
(async function testingAsyncAwait() {
await console.log("Print me!");
})();
Log-
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
Apa yang saya lewatkan? Tolong beri saya penjelasan yang sama.
Pembaruan 1:
Saya mencoba menggunakan Babel seperti yang disarankan Quentin, Tapi, saya masih mendapatkan kesalahan berikut.
Kode yang Diperbarui-
require("babel-core/register");
require("babel-polyfill");
(async function testingAsyncAwait() {
await console.log("Print me!");
})();
Log-
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 | })();
javascript
node.js
express
asynchronous
async-await
bozzmob.dll
sumber
sumber
Jawaban:
Fungsi asinkron tidak didukung oleh versi Node yang lebih lama dari versi 7.6 .
Anda harus mentranspilasi kode Anda (misalnya menggunakan Babel ) ke versi JS yang dipahami Node jika Anda menggunakan versi yang lebih lama.
Meskipun demikian, Node.js versi LTS (2018) saat ini adalah 8.x, jadi jika Anda menggunakan versi sebelumnya, Anda harus sangat mempertimbangkan untuk meningkatkannya.
sumber
Nodejs mendukung async / await dari versi 7.6.
Posting rilis: https://v8project.blogspot.com.br/2016/10/v8-release-55.html
sumber
Node.js tidak sepenuhnya mendukung ES6 saat ini, sehingga Anda bisa menggunakan asyncawait modul atau transpile menggunakan Bable.
Install
helloz.js
sumber
Jika Anda hanya bereksperimen, Anda dapat menggunakan
babel-node
alat baris perintah untuk mencoba fitur JavaScript baruInstal
babel-cli
ke dalam proyek Anda$ npm install --save-dev babel-cli
Pasang preset
$ npm install --save-dev babel-preset-es2015 babel-preset-es2017
Siapkan preset babel Anda
Buat
.babelrc
di folder root proyek dengan konten berikut:{ "presets": ["es2015","es2017"] }
Jalankan skrip Anda dengan
babel-node
$ babel-node helloz.js
Ini hanya untuk pengembangan dan pengujian tetapi sepertinya itulah yang Anda lakukan. Pada akhirnya Anda ingin menyiapkan webpack (atau yang serupa) untuk mentranspilasi semua kode Anda untuk produksi
Jika Anda ingin menjalankan kode di tempat lain, webpack dapat membantu dan berikut adalah konfigurasi paling sederhana yang dapat saya lakukan:
sumber
node v6.6.0
Jika Anda hanya menggunakan dalam pengembangan. Kamu bisa melakukan ini:
yang
package.json
akan menjadi seperti ini:buat
.babelrc
file dan tulis ini:dan kemudian, jalankan
async/await
skrip Anda seperti ini:sumber
Meskipun saya datang terlambat, yang berhasil bagi saya adalah menginstal plugin transform-async-generator dan transform-runtime seperti:
npm i babel-plugin-transform-async-to-generator babel-plugin-transform-runtime --save-dev
yang
package.json
akan menjadi seperti ini:buat
.babelrc
file dan tulis ini:dan selamat membuat kode dengan
async/await
sumber
sertakan dan tentukan versi mesin node ke yang terbaru, katakanlah saat ini saya menambahkan versi 8.
di file berikut
sumber
Saya juga punya masalah yang sama.
Saya menjalankan node v 6.2 bersama menggunakan purgecss dalam gulpfile saya. Masalah hanya terjadi ketika saya membuat proyek Laravel baru; Hingga saat itu, saya tidak pernah memiliki masalah dengan purgecss.
Mengikuti pernyataan @ Quentin - bagaimana versi node sebelum 7.6 tidak mendukung fungsi async - Saya memutuskan untuk memperbarui versi node saya ke 9.11.2
Ini berhasil untuk saya:
1-
2-
hapus 'node_modules' dari direktori rute
3-
Masih tidak yakin bagaimana node / purgecss bekerja sebelum memperbarui .. tapi ini berhasil.
sumber