Mai mult
Node.js - SyntaxError: tokenul de import
Eu nu't înțeleagă ceea ce este greșit. Nod v5.6.0 NPM v3.10.6
Cod:
function (exports, require, module, __filename, __dirname) {
import express from 'express'
};
Eroare:
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
388
11
Update 3: Din Nod 13, puteți utiliza fie .mjs extensie, sau pentru a seta "tip": "modulul" in pachet.json. Ai don't necesitatea de a utiliza `--experimentale-module de pavilion.
Update 2: Din Nod 12, puteți utiliza fie
.mjs
extensie, sau pentru a seta"tip": "modulul" in pachet.json. Și aveți nevoie pentru a rula nod cu
--experimentale-module de pavilion.Actualizare: In Nod 9, este activată în spatele unui steag, și folosește.mjs` extensie.
În timp ce "import" este într-adevăr o parte din ES6, este, din păcate, nu este încă susținută în NodeJS în mod implicit, și are doar foarte recent aterizat de sprijin în browsere.
A se vedea a browser-compat masă pe MDN și acest Nod problema.
De la James M. Snell's Update pe ES6 Module în Node.js (februarie 2017):
Până sprijin apare nativ, nu'll trebuie să continuați să utilizați clasic
nevoie
de declarații:Dacă într-adevăr doriți să utilizați noile ES6/7 caracteristici în NodeJS, puteți compila folosind Babel. Aici's un exemplu de server.
Din păcate, Node.js nu't suport ES6's "import" încă.
Pentru a realiza ce v're încercarea de a face (de import Express module), acest cod ar trebui să fie suficient
De asemenea, asigurați-vă că aveți Express instalate prin rularea
Vezi Node.js Docs pentru mai multe informații despre învățare Node.js.
Eroare: SyntaxError: tokenul import sau SyntaxError: tokenul export
Soluție: Schimba toate importurile ca exemplu
Și, de asemenea, schimba-ti
export default = foo;
lamodul.exporturile = foo;
Așa cum am menționat în alte răspunsuri Node JS în prezent nu't suport ES6 importurilor.
(Ca de acum, citiți EDIT 2)
Enable ES6 importurile în node js oferă o soluție pentru această problemă. Am încercat acest lucru și a lucrat pentru mine.
Rulați comanda:
Acum aveți nevoie pentru a crea un nou fișier (config.js) și adăugați următorul cod la ea.
Acum puteți scrie declarații de import, fără a se eventualele erori.
Sper că acest lucru vă ajută.
EDIT:
Aveți nevoie pentru a rula noul fișier pe care ați creat cu codul de mai sus. În cazul meu a fost
config.js
. Așa că trebuie să ruleze:EDIT 2:
În timp ce experimente, am găsit o soluție simplă la această problemă.
Crea
.babelrc
fișierul în rădăcina proiectului.Se adaugă următorul (și orice alte babel presetări ai nevoie, poate fi adăugat în acest dosar):
Instala
babel-preset-env
folosind comandanpm instala babel-preset-env-salvați
, și apoi instalațibabel-cli
folosind comandanpm instala babel-cli -g --save
Acum, du-te la folderul în cazul în care server-ul dvs. sau fișier index există și rula folosind: babel-nod fileName.js
Sau puteți rula folosind
npm start
prin adăugarea următorul cod lapachetul
.json`` fișier:În caz că încă mai poate't de a folosi "import" aici este cum m-am descurcat: Doar traduce la un nod prietenos nevoie. Exemplu:
Este la fel ca:
dacă puteți utiliza 'babel', încercați să adăugați construi script-uri în pachet.json(--presetări=es2015) ca mai jos. pentru precompile codul de import pentru es2015
babel 7 propunere puteți adăuga dev dependențe
și adăugați-o .babelrc în rădăcină
și se adaugă la .fișier js
sau dacă tu a alerga în cli, ai putea folosi nevoie de cârlig ca -r @babel/inregistrare, ex.
Ca de Node.js v12 (și acest lucru este, probabil, destul de stabil acum, dar încă marcat "experimental"), aveți o serie de opțiuni pentru utilizarea MES (ECMAScript Modules) în Node.js (pentru fișiere, acolo's o a treia cale pentru evaling siruri de caractere), aici's ce documentația spune:
În cazul meu a fost căutat.babelrc` fișier, și acesta ar trebui să conțină ceva de genul asta:
Când am început cu express dorit întotdeauna o soluție de a folosi import, în schimb, necesită
const expres = necesită("express"); // pentru import express de la "express"
Timp de multe du-te prin această linie: - din Păcate, Node.js nu't suport ES6's de import încă.Acum, pentru a ajuta alti pot crea noi două soluții aici
Strălucit simplu, babel-mai puțin, bundle-mai puțin ECMAScript module loader. las's face să funcționeze
fire add mes / npm instala mes
crea start.js sau de a folosi numenevoie = necesită("mes")(modulul/*, opțiuni*/) // Import restul de aplicare noastre. module.exporturile = necesită('./src/server.js') // unde server.js este express start file server
Schimbare în pachet.josntrece calea de start.js
`` "script": { "start": "nod de start.js", "start:dev": "nodemon începe.js", }, "dependențe": {Acest lucru poate fi împărțiți în 2 părți
a) Soluție 1 datorită timonweb.com
b) Soluție 2
folosi Babel 6 (versiune mai veche de babel-preset-etapa a-3 ^6.0) crea
.babelrc
fișier la folderul rădăcină{ "presetări": ["mediu", "etapa a-3"] }
Instalați babel-preset-etapa a-3fire adauga babel-cli babel-polyfill babel-preset-env bable-preset-etapa a-3 nodemon-dev
Schimbare în pachet.json `` "script": {Porni server-ul dvs.
fire start / npm începeOooh nu ne-am crea noi probleme
regeneratorRuntime.marca(funcția _callee(e-mail, parola) { ^ ReferenceError: regeneratorRuntime nu este definitAceastă eroare veni numai atunci când utilizați asincron/așteaptă în cod. Apoi, utilizați polyfill, care include un obicei regenerator de execuție și de bază-js. adauga pe partea de sus de index.js`
import "babel-polyfill" `` Acest lucru vă permite să utilizați asincron/așteaptăfolosi Babel 7
Trebuie să-pana la data de fiecare lucru în proiectul dumneavoastră să începem cu babel 7 .babelrc
{ "presetări": ["@babel/preset-env"] }
O schimbare în pachet.json `` "script": {și de a folosi `import "@babel/polyfill" la punctul de start
import "@babel/polyfill" import express de la 'exprim' const app = exprima()//IA cerere app.obține('/', asincron (req, res) { // așteaptă funcționare res.trimite - ('salut lume') }) app.asculta(4000, () => console.log('🚀 Server de ascultare pe portul 400!')) `
Te gândești de ce
start:dev`Serios. Aceasta este o întrebare bună, dacă sunteți nou. Fiecare schimbare ești mistreț cu start server de fiecare dată apoi folosesc fire de start:dev` ca server de dezvoltare fiecare schimbare restart la server automat pentru mai multe pe nodemon
Am'm-a șocat
mes
n't a fost menționat. Acest mic, dar puternic pachet vă permite să utilizați fie "import" sauimpun
.Instala mes în proiect
$ npm install-salvare mes
Actualizare ta de Start Nod Script pentru a utiliza mes
nod -r mes app.js
mes
pur și simplu funcționează. Am pierdut o GRĂMADĂ de timp cu.mjs " și " --experimentale-module
doar pentru a afla un.mjs
fișierul nu poate importa un fișier care utilizeazănevoie de " sau " module.exporturile
. Acest lucru a fost o mare problemă, întrucâtmes
vă permite să se amestecă și se potrivesc și că doar își închipuie...mes
pur și simplu funcționează.