80 votes

ES2015 "import" ne fonctionne pas dans node v6.0.0 avec l'option --harmony_modules

J'utilise node v6.0.0 et je voulais utiliser ES2016 (ES6). Cependant, je me suis rendu compte que la syntaxe "import" ne fonctionne pas. L'importation n'est-elle pas fondamentale pour l'écriture de code modulaire dans ES2015 ? J'ai essayé de lancer node avec --harmony_modules mais j'ai toujours la même erreur à propos de "import". Voici le code.

Code de travail sans "import" :

'use strict';
let sum = 0;
class Number {

  addNumber(num1, num2) {
    return num1 + num2;
  }
}
let numberObj = new Number();
sum = numberObj.addNumber(1,2);
console.log("sum of two number 1 and 2 "+ sum);

Code de non-travail avec "import" :

server.js

'use strict';
import Number from "./Number";

let sum = 0;

let numberObj = new Number();

sum = numberObj.addNumber(1,2);
console.log("sum of two number 1 and 2 "+ sum);

Nombre.js

'use strict';
export default class Number {

  addNumber(num1, num2) {
    return num1 + num2;
  }
}

J'ai aussi vérifié http://node.green/ pour voir les es6 supportés mais pas capable de comprendre pourquoi il ne fonctionne pas avec l'option --harmony_modules. Veuillez m'aider.

0 votes

Utiliser Webpack avec le chargeur Babel

2 votes

Vous ne devriez pas avoir besoin de babel ou webpack en v6

87voto

Paulpro Points 54844

Ils ne sont simplement pas encore mis en œuvre.

Node 6.0.0 utilise une version de V8 avec la plupart des fonctionnalités ES6 complétées. Malheureusement, les modules ne font pas partie de ces fonctionnalités achevées.

node --v8-options | grep harmony 

en cours Les drapeaux d'harmonie ne sont pas entièrement mis en œuvre et ne fonctionnent généralement pas :

--es_staging (activer les fonctionnalités d'harmonie dignes de tests ( pour usage interne uniquement ))
--harmony (active toutes les fonctions d'harmonie complétées)
--harmony_shipping (activer toutes les fonctions d'harmonie livrées)
--harmony_object_observe (enable "harmony Object.observe" ( en cours ))
--harmony_modules (activer les "modules d'harmonie" ( en cours ))
--harmony_function_sent (activer "harmony function.sent" ( en cours ))
--harmony_sharedarraybuffer (enable "harmony sharedarraybuffer" ( en cours ))
--harmony_simd (activer "harmony simd" ( en cours ))
--harmony_do_expressions (enable "harmony do-expressions" ( en cours ))
--harmony_iterator_close (activer "la finalisation de l'itérateur d'harmonie" ( en cours ))
--harmony_tailcalls (activer "harmony tail calls" ( en cours ))
--harmony_object_values_entries (enable "harmony Object.values / Object.entries" ( en cours ))
--harmony_object_own_property_descriptors (enable "harmony Object.getOwnPropertyDescriptors()" ( en cours ))
--harmony_regexp_property (enable "harmony unicode regexp property classes" ( en cours ))
--harmony_function_name (activer "l'inférence du nom de la fonction d'harmonie")
--harmony_regexp_lookbehind (activer "harmony regexp lookbehind")
--harmony_species (activer "harmony Symbol.species")
--harmony_instanceof (enable "harmony instanceof support")
--harmony_default_parameters (activer "paramètres par défaut de l'harmonie")
--harmony_destructuring_assignment (activer "affectation de déstructuration de l'harmonie")
--harmony_destructuring_bind (activer "harmony destructuring bind")
--harmony_tostring (activer "harmony toString")
--harmony_regexps (activer les "extensions d'expression régulière de l'harmonie")
--harmony_unicode_regexps (activer "harmony unicode regexps")
--harmony_sloppy (activer "les fonctions d'harmonie en mode sloppy")
--harmony_sloppy_let (activer "harmony let en mode sloppy")
--harmony_sloppy_function (activer "harmony sloppy function block scoping")
--harmony_proxies (active "harmony proxies")
--harmony_reflect (active "l'API harmony Reflect")
--harmony_regexp_subclass (active "harmony regexp subclassing")

13 votes

Merci. Je l'ai vu mais je n'y croyais pas car "import" est l'une des syntaxes importantes d'es6.

1 votes

Oui, j'espère qu'il sera bientôt disponible.

0 votes

Merci. Où puis-je trouver la liste des travaux en cours ?

40voto

CodeVortex Points 534

Ceci devrait être un commentaire à la réponse de @Paulpro mais je n'ai pas assez de représentants pour poster un commentaire.

Para Windows utilisateurs la commande équivalente est :

node --v8-options | findstr harmony

32voto

wires Points 907

En attendant que les modules soient implémentés, vous pouvez utiliser le "transpilateur" Babel pour exécuter votre code :

npm install --save babel-cli babel-preset-node6
./node_modules/.bin/babel-node --presets node6 ./your_script.js

Ver https://www.npmjs.com/package/babel-preset-node6 y https://babeljs.io/docs/usage/cli/

Inconvénients Cela présente divers inconvénients, comme un temps de compilation supplémentaire, qui peut être important, et vous avez maintenant besoin de cartes de sources pour le débogage.

16voto

Comme il est indiqué ci-dessus, les modules ES6 ne sont pas encore implémentés.

La mise en œuvre des modules ES6 d'une manière qui serait rétrocompatible avec les modules Common JS, qui est la syntaxe actuelle des modules Node.js, semble être un problème non trivial.

Cependant, il existe un projet d'une implémentation, qui introduit une nouvelle extension de fichier - .mjs - pour un fichier contenant des modules ES6.

Il existe également un contre-proposition qui présentent une approche alternative consistant à déclarer tous les fichiers contenant des modules ES6 dans le fichier package.json comme suit :

{
    "modules.root": "/path/to/es6/modules"
}

1 votes

Je pense que c'est un point important. "Les puissances en place sont toujours en train de se disputer à propos de la spécification, et ensuite elle doit apparaître dans la v8 avant qu'elle puisse arriver à Node.

1 votes

Juste une note : Le dernier projet n'exige pas .mjs comme une extension, ce qui est bien mieux pour la compatibilité.

0 votes

La question est : où puis-je trouver ces modules es6 à télécharger ?

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