Saya tidak mengerti apa yang salah. Node v5.6.0 NPM v3.10.6
Kode:
function (exports, require, module, __filename, __dirname) {
import express from 'express'
};
Kesalahan:
SyntaxError: Unexpected token import
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:387:25)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Function.Module.runMain (module.js:447:10)
at startup (node.js:140:18)
at node.js:1001:3
javascript
node.js
npm
ecmascript-6
SofDroid
sumber
sumber
Jawaban:
Pembaruan 3: Sejak Node 13 , Anda dapat menggunakan ekstensi .mjs, atau mengatur "type": "module" di package.json Anda. Anda tidak perlu menggunakan
--experimental-modules
bendera.Pembaruan 2: Sejak Node 12 , Anda dapat menggunakan
.mjs
ekstensi, atau mengatur"type": "module"
package.json Anda. Dan Anda perlu menjalankan simpul dengan--experimental-modules
bendera.Pembaruan: Di Node 9 , diaktifkan di belakang bendera, dan menggunakan
.mjs
ekstensi.Walaupun
import
memang merupakan bagian dari ES6, sayangnya ini belum didukung di NodeJS secara default, dan baru-baru ini mendapatkan dukungan di browser.Lihat tabel compat browser di MDN dan masalah Node ini .
Dari Pembaruan James M Snell tentang Modul ES6 di Node.js (Februari 2017):
Sampai dukungan muncul secara asli, Anda harus terus menggunakan
require
pernyataan klasik :Jika Anda benar-benar ingin menggunakan fitur ES6 / 7 baru di NodeJS, Anda dapat mengompilasinya menggunakan Babel. Inilah contoh server .
sumber
Sayangnya, Node.js belum mendukung ES6
import
.Untuk mencapai apa yang Anda coba lakukan (mengimpor modul Express), kode ini sudah cukup
Juga, pastikan Anda telah menginstal Express dengan menjalankan
Lihat Node.js Documents untuk informasi lebih lanjut tentang mempelajari Node.js.
sumber
import
belum tentu merupakan fitur dari TypeScript. TypeScript adalah ES6 dengan mengetik. Jadi barang-barang seperti impor adalah ES6 asli.node index.js
bekerja untuk saya, tetapi ketika saya menjalankannode dist/main.js
saya juga mendapatkanUnexpected token import
.index.js
lulus tidak berarti Andadist/main.js
akan lulus juga.Seperti disebutkan dalam jawaban lain Node JS saat ini tidak mendukung impor ES6.
(Sampai sekarang, baca EDIT 2)
Aktifkan impor ES6 di simpul js memberikan solusi untuk masalah ini. Saya sudah mencoba ini dan itu berhasil untuk saya.
Jalankan perintah:
Sekarang Anda perlu membuat file baru (config.js) dan menambahkan kode berikut ke dalamnya.
Sekarang Anda dapat menulis pernyataan impor tanpa mendapatkan kesalahan.
Semoga ini membantu.
EDIT:
Anda perlu menjalankan file baru yang Anda buat dengan kode di atas. Dalam kasus saya itu
config.js
. Jadi saya harus lari:EDIT 2:
Saat bereksperimen, saya menemukan satu solusi mudah untuk masalah ini.
Membuat
.babelrc
file di root proyek Anda.Tambahkan berikut ini (dan semua preset babel lainnya yang Anda butuhkan, dapat ditambahkan dalam file ini):
Instal
babel-preset-env
menggunakan perintahnpm install babel-preset-env --save
, lalu instalbabel-cli
menggunakan perintahnpm install babel-cli -g --save
Sekarang, buka folder tempat server atau file indeks Anda ada dan jalankan menggunakan: babel-node fileName.js
Atau Anda dapat menjalankan menggunakan
npm start
dengan menambahkan kode berikut kepackage.json
file Anda :sumber
"start": "babel-node electron .",
tetapi tidak berhasilKesalahan: SyntaxError: Impor token yang tidak terduga atau SyntaxError: Ekspor token yang tidak terduga
Solusi: Ubah semua impor Anda sebagai contoh
Dan juga ubah
export default = foo;
kemodule.exports = foo;
sumber
Saya terkejut
esm
belum disebutkan. Paket kecil ini, tetapi perkasa memungkinkan Anda untuk menggunakan salah satuimport
ataurequire
.Instal ESM di proyek Anda
$ npm install --save esm
Perbarui Script Mulai Node Anda untuk menggunakan ESM
node -r esm app.js
esm
hanya bekerja. Saya menyia-nyiakan waktu TON dengan.mjs
dan--experimental-modules
hanya untuk mengetahui.mjs
file tidak dapat mengimpor file yang menggunakanrequire
ataumodule.exports
. Ini adalah masalah besar, sedangkanesm
memungkinkan Anda untuk mencampur dan mencocokkan dan itu hanya mencari tahu ...esm
hanya berfungsi.sumber
Jika Anda masih tidak dapat menggunakan "impor" di sini adalah bagaimana saya menanganinya: Hanya menerjemahkannya ke simpul yang diperlukan. Contoh:
Sama dengan:
sumber
export
kata kunciexport
kata kunci, lagipula terima kasih atas bantuan Anda!Babel 7 proposal dapat Anda tambahkan dependensi dev
dan tambahkan .babelrc di root
dan tambahkan ke file .js
atau jika Anda menjalankannya di cli, Anda dapat menggunakan hook yang memerlukan sebagai -r @ babel / register, mis.
sumber
jika Anda dapat menggunakan 'babel', cobalah untuk menambahkan skrip build di package.json (- preset = es2015) seperti di bawah ini. itu membuat mengkompilasi kode impor ke es2015
sumber
npm start
pertama kali melakukan "build", atau yang pertama melakukan "start"? (Awal saat ini didefinisikan:"nodemon src/app.js --exec \"npm run lint && node\"",
Pada Node.js v12 (dan ini mungkin cukup stabil sekarang, tetapi masih ditandai "eksperimental"), Anda memiliki beberapa opsi untuk menggunakan ESM ( E CMA S cript M odules) di Node.js (untuk file, ada cara ketiga untuk menghindari string), inilah yang dikatakan dokumentasi :
sumber
Ketika saya mulai dengan express selalu menginginkan solusi untuk menggunakan impor bukannya memerlukan
Banyak waktu melewati baris ini: -
Unfortunately, Node.js doesn't support ES6's import yet.
Sekarang untuk membantu yang lain, saya membuat dua solusi baru di sini
1) ESM : -
Pemuat modul ECMAScript yang sederhana, tanpa label, tanpa bundel. mari kita membuatnya bekerja
buat start.js atau gunakan namespace Anda
Ubah
package.josn
jalur pass Anda daristart.js
2) Babel js : -
Ini dapat dibagi menjadi 2 bagian
a) Solusi 1 berkat timonweb.com
b) Solusi 2
gunakan Babel 6 (versi lama dari babel-preset-stage-3 ^ 6.0 ) buat
.babelrc
file di folder root AndaInstal babel-preset-stage-3
Ubah package.json
Mulai server Anda
Oooh tidak, kami menciptakan masalah baru
Kesalahan ini hanya terjadi ketika Anda menggunakan async / menunggu dalam kode Anda. Kemudian gunakan polyfill yang menyertakan runtime regenerator kustom dan core-js. tambahkan di atas
index.js
Ini memungkinkan Anda untuk menggunakan async / menunggu
gunakan Babel 7
Perlu memperbarui setiap hal dalam proyek Anda, mari kita mulai dengan babel 7 .babelrc
Beberapa perubahan pada package.json
dan gunakan
import "@babel/polyfill"
pada titik awalApakah kamu berpikir mengapa
start:dev
Serius. Ini pertanyaan yang bagus jika Anda baru. Setiap perubahan Anda babi dengan server mulai setiap kali kemudian digunakan
yarn start:dev
sebagai server pengembangan setiap perubahan restart server secara otomatis untuk lebih lanjut tentang nodemonsumber
Dalam kasus saya itu sedang mencari
.babelrc
file, dan itu harus berisi sesuatu seperti ini:sumber