Node.js - SyntaxError : Importation inattendue d'un jeton

Je ne comprends pas ce qui ne va pas. Node v5.6.0 NPM v3.10.6

Le code :

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

L'erreur :

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
Solution

Mise à jour 3: Depuis [Node 13][7], vous pouvez utiliser soit l'extension .mjs, soit définir "type" : "module&quot ; dans votre package.json. Vous n'avez pas besoin d'utiliser le drapeau --experimental-modules.

Mise à jour 2: Depuis [Node 12][6], vous pouvez utiliser soit l'extension .mjs, soit définir "type" : "module" dans votre package.json. Et vous devez exécuter node avec le drapeau --experimental-modules.

Mise à jour: Dans [Node 9][1], il est activé derrière un drapeau, et utilise l'extension .mjs.

node --experimental-modules my-app.mjs

Bien que import fasse effectivement partie de ES6, il n'est malheureusement pas encore supporté par défaut dans NodeJS, et n'a que très récemment obtenu le support dans les navigateurs.

Voir [le tableau de compatibilité des navigateurs sur MDN][2] et [ce problème Node][3].

Extrait de [Update on ES6 Modules in Node.js][4] (février 2017) de James M Snell's :

Le travail est en cours mais cela va prendre du temps - Nous envisageons actuellement environ un an au moins.

Jusqu'à ce que le support apparaisse de manière native, vous devrez continuer à utiliser les déclarations require classiques :

const express = require("express");

Si vous voulez vraiment utiliser les nouvelles fonctionnalités ES6/7 de NodeJS, vous pouvez le compiler en utilisant Babel. [Voici un exemple de serveur][5].

[1] : https://nodejs.org/api/esm.html [2] : https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/import#Browser_compatibility [3] : https://github.com/nodejs/help/issues/53 [4] : https://medium.com/the-node-js-collection/an-update-on-es6-modules-in-node-js-42c958b890c [5] : https://github.com/babel/example-node-server [6] : https://thecodebarbarian.com/nodejs-12-imports [7] : https://github.com/nodejs/node/releases/tag/v13.2.0

Commentaires (11)

Malheureusement, Node.js ne supporte pas encore le import de ES6.

Pour accomplir ce que vous essayez de faire (importer le module Express), le code suivant devrait suffire

var express = require("express");

Vérifiez également que Express est installé en exécutant

$ npm install express

Consultez les [Node.js Docs][1] pour plus d'informations sur l'apprentissage de Node.js.

[1] : https://nodejs.org/en/docs/

Commentaires (5)

Erreur: SyntaxError : Unxpected token import ou SyntaxError : Unxpected token export


Solution: Changez toutes vos importations comme exemple

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

Et changez aussi votre export default = foo; en module.exports = foo;

Commentaires (2)