2016-09-11 9 views
99

Ich verstehe nicht, was falsch ist. Knoten v5.6.0 NPM v3.10.6Node.js - SyntaxError: Unerwarteter Token-Import

Mein Code:

(function (exports, require, module, __filename, __dirname) { import express from 'express'; 

Fehler:

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 
+0

Verwenden Transpiler es2015 wie Babel Import in NodeJS zu verwenden, da es nicht nativ in nodejs.There unterstützt wird, ist beste Alternative von Import ist damit so gehen müssen. –

Antwort

143

Aktualisierung: In Node 9 ist es hinter einem Flag aktiviert und verwendet die Erweiterung .mjs.

node --experimental-modules my-app.mjs 

Während import ist in der Tat Teil des ES6 ist es leider noch nicht in NodeJS standardmäßig unterstützt, und die Unterstützung in Browsern erst kürzlich gelandet.

Siehe browser compat table on MDN und this Node issue.

Von James M Snell des Update on ES6 Modules in Node.js (Februar 2017):

Work is in progress but it is going to take some time — We’re currently looking at around a year at least.

Bis Unterstützung nativ auftaucht, werden Sie mit klassischen require Aussagen weiterhin haben:

const express = require("express"); 

Wenn Sie wirklich wollen Verwenden Sie in NodeJS neue ES6/7-Funktionen, die Sie mit Babel kompilieren können. Here's an example server.

+2

Sind wir schon da? ;) –

18

Leider hat Node.js nicht ES6 die Unterstützung import noch.

Um das zu erreichen, was Sie versuchen zu tun (das Express-Modul importiert werden), sollte dieser Code

var express = require("express"); 

auch genügen, sollten Sie von Express installiert haben

$ npm install express 

See läuft die Node.js Docs für weitere Informationen zum Lernen von Node.js.

+2

'import' ist nicht unbedingt ein Feature von TypeScript. TypeScript ist ES6 mit Typings. So etwas wie Import ist ES6 nativ. – borislemke

+0

@borislemke Richtig, ich habe das OP ein bisschen falsch interpretiert. :) Ich werde es ändern. – baranskistad

+0

Wie es aussieht, ist diese Antwort jetzt hilfreich und korrekt und verdient eine höhere Punktzahl imho. +1 –

5

Fehler: Syntaxerror: unerwartetes Token Import oder Syntaxerror: unerwartete Token Export


Lösung: Ändern Sie alle Ihre Importe als Beispiel

const express \t \t \t \t = require('express'); 
 
const webpack \t \t \t \t = require('webpack'); 
 
const path \t \t \t \t \t = require('path'); 
 
const config \t \t \t \t = require('../webpack.config.dev'); 
 
const open \t \t \t \t \t = require('open');

Und auch ändern Sie Ihre Export default = foo;

+0

Ich wünschte, du hättest den Export Default Teil ein wenig mehr erklärt. Ich habe Probleme mit diesem Teil. Der Import funktioniert gut mit Ihrer Antwort. – JoeGalind

+0

Es gibt eine Antwort vor meiner Antwort, die eine Erklärung hat. Aber zur Klarstellung unterstützt der Knoten die ES6-Syntax nicht. Wenn Sie Importieren ... sagen, verwenden Sie die ES6-Syntax – supritshah1289

1

Wenn Sie 'babel' verwenden können, versuchen Sie Build-Skripte in package.json (- presets = es2015) wie folgt hinzuzufügen.es macht Import Code vorzukompilieren

"build": "babel server --out-dir build --presets=es2015 && webpack" 
Verwandte Themen