Node.js - SyntaxError: Importazione token inaspettata

Non capisco cosa c'è di sbagliato. Nodo v5.6.0 NPM v3.10.6

Il codice:

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

L'errore:

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
Soluzione

Aggiornamento 3: Da Node 13, puoi usare l'estensione .mjs, o impostare "type": "module" nel tuo package.json. Non è necessario usare il flag --experimental-modules.

Aggiornamento 2: Da Node 12, puoi usare o l'estensione .mjs, o impostare "type": "module" nel tuo package.json. E devi eseguire node con il flag --experimental-modules.

Aggiornamento: In Node 9, è abilitato dietro una bandiera, e usa l'estensione .mjs.

node --experimental-modules my-app.mjs

Mentre import è effettivamente parte di ES6, sfortunatamente non è ancora supportato di default in NodeJS, e solo molto recentemente ha ottenuto il supporto nei browser.

Vedi tabella di compatibilità dei browser su MDN e questo problema di Node.

Da James M Snell's Update on ES6 Modules in Node.js (febbraio 2017):

Il lavoro è in corso, ma ci vorrà un po' di tempo - Attualmente stiamo guardando a circa un anno almeno.

Fino a quando il supporto non apparirà nativamente, dovrai continuare ad usare le classiche dichiarazioni require:

const express = require("express");

Se vuoi davvero usare le nuove funzionalità ES6/7 in NodeJS, puoi compilare usando Babel. Ecco un server di esempio.

Commentari (11)

Sfortunatamente, Node.js non supporta ancora ES6.

Per realizzare quello che stai cercando di fare (importare il modulo Express), questo codice dovrebbe essere sufficiente

var express = require("express");

Inoltre, assicurati di avere installato Express eseguendo

$ npm install express

Vedi i Node.js Docs per maggiori informazioni su come imparare Node.js.

Commentari (5)

Errore: SyntaxError: Token inatteso import o SyntaxError: Token inatteso export


Soluzione: Cambia tutte le tue importazioni come esempio

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

E cambia anche il tuo export default = foo; in module.exports = foo;

Commentari (2)