513 votes

Node.js - SyntaxError : Importation de jeton inattendue

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

4 votes

Utilisez un transpilateur comme Babel pour utiliser l'importation dans Nodejs, car il n'est pas pris en charge de manière native dans nodejs.

0 votes

Support de l'importation () du nodejs v16 - Checkout nodejs.org/api/packages.html

578voto

Scimonster Points 24965

Nœud 13+. Depuis Nœud 13 vous pouvez utiliser soit le .mjs ou définir {"type": "module"} dans votre package.json. Vous no doivent utiliser le --experimental-modules drapeau. Modules est maintenant marqué comme stable dans node.js

Nœud 12 Depuis Nœud 12 vous pouvez utiliser soit le .mjs ou définir "type": "module" dans votre package.json. Et vous devez lancer node avec l'option --experimental-modules drapeau.

Nœud 9 Sur Nœud 9 il est activé derrière un drapeau, et utilise la fonction .mjs extension.

node --experimental-modules my-app.mjs

Alors que import fait en effet partie de l'ES6, il n'est malheureusement pas encore pris en charge par NodeJS par défaut, et n'a que très récemment obtenu un support dans les navigateurs.

Voir Tableau de compatibilité des navigateurs sur MDN y ce problème de Node .

De James M Snell Mise à jour sur les modules ES6 dans Node.js (février 2017) :

Le travail est en cours, mais cela va prendre un certain temps - nous pensons actuellement qu'il faudra au moins un an.

Jusqu'à ce que le support se manifeste de manière native ( maintenant marqué stable dans Node 13+ ), vous devrez continuer à utiliser la version classique require déclarations :

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 .

2 votes

Quelqu'un sait-il si le node 10 sera livré avec le support activé par défaut ? (lancement prévu le mois prochain)

0 votes

Node --experimental-modules my-app.mjs quelle est la signification de "--experimental-modules" et "my-app.mjs".

0 votes

@Leo --experimental-modules est le drapeau pour l'activer, et my-app.mjs est le fichier.

67voto

baranskistad Points 1206

Malheureusement, Node.js ne prend pas en charge la fonction ES6 import encore.

Pour réaliser ce que vous essayez de faire (importer le module Express), ce code devrait suffire

var express = require("express");

Vérifiez également que vous avez installé Express en exécutant

$ npm install express

Voir le Docs Node.js pour plus d'informations sur l'apprentissage de Node.js.

9 votes

import n'est pas nécessairement une caractéristique de TypeScript. TypeScript est ES6 avec des typages. Donc des choses comme import sont natives de ES6.

2 votes

Node prend maintenant en charge cette fonctionnalité de manière native, cette réponse est donc obsolète.

34voto

supritshah1289 Points 415

Erreur : Erreur de syntaxe : Unxpected token import ou SyntaxError : Unxpected token exporter


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; a module.exports = foo;

1 votes

J'aurais aimé que vous expliquiez un peu plus la partie sur l'exportation par défaut. J'ai des difficultés avec cette partie. L'importation fonctionne très bien avec votre réponse.

0 votes

Il y a une réponse avant ma réponse qui a une explication. Mais pour clarifier, Node ne supporte pas la syntaxe ES6. Quand vous dites Import ... vous utilisez la syntaxe ES6.

0 votes

Cela a fonctionné pour moi.

9voto

ASTOMUSIC Points 109

Si vous pouvez utiliser 'babel', essayez d'ajouter build scripts dans package.json(--presets=es2015) comme ci-dessous. cela permet de précompiler le code d'importation vers es2015.

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

0 votes

Mais est-ce que mon appel à npm start d'abord faire la "construction", ou d'abord faire le "départ" ? (Le départ est actuellement défini : "nodemon src/app.js --exec \"npm run lint && node\"",

0 votes

Si j'exécute cette commande, l'erreur "server doen't exist" apparaît.

3voto

Ghita Tomoiaga Points 94

Dans mon cas, il s'agissait de veiller sur .babelrc et il devrait contenir quelque chose comme ceci :

{
  "presets": ["es2015-node5", "stage-3"],
  "plugins": []
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X