ES2015 "import" no funciona en el nodo v6. 0. 0 con la opción with harmony modules


Estoy usando el nodo v6.0.0 y quería usar ES2016 (ES6). Sin embargo, me di cuenta de que la sintaxis de "importación" no está funcionando. ¿No es fundamental" importar " para escribir código modular en ES2015? Intenté ejecutar el nodo con la opción --harmony_modules también, pero todavía tengo el mismo error sobre "importar". Aquí está el código.

Código de trabajo sin"importar":

'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);

Código que no funciona con"import":

Servidor.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);

Número.js

'use strict';
export default class Number {

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

También comprobé http://node.green / para ver el es6 soportado sin embargo no es capaz de entender por qué no funciona con la opción harmon harmony_modules. Por favor, ayuda.

Author: Dan Dascalescu, 2016-04-28

4 answers

Simplemente no están implementadas todavía.

Node 6.0.0 utiliza una versión de V8 con la mayoría de las características de ES6 completadas. Desafortunadamente modules no es una de esas características completadas.

node --v8-options | grep harmony 

En progreso las banderas harmony no están completamente implementadas y generalmente no funcionan:

} es_staging (habilitar características de harmony dignas de prueba ( solo para uso interno))
-- harmony (habilitar todas las características de armonía completadas)
--harmony_shipping (habilitar todos los enviados características de armonía)
-- harmony_object_observe (habilitar " Objeto harmony.observar" (en progreso))
--harmony_modules (habilitar "armonía " módulos" (en progreso))
-- harmony_function_sent (habilitar la función "harmony".enviado" (en progreso))
-- harmony_sharedarraybuffer (habilitar "harmony sharedarraybuffer" ( en progreso))
-- harmony_simd (habilitar "harmony simd" (en progreso))
--harmony_do_expressions (habilitar "harmony do-expressions" ( en progreso))
-- harmony_iterator_close (habilitar "harmony iterator finalization" (en progreso))
-- harmony_tailcalls (habilitar "harmony tail calls" ( en progreso))
-- harmony_object_values_entries (habilitar " Objeto harmony.valores / Objeto.entradas " ( en curso))
-- harmony_object_own_property_descriptors (habilitar " Objeto harmony.getOwnPropertyDescriptors () " (en progreso))
-- harmony_regexp_property (habilitar "harmony unicode regexp property classes" (en progreso))
-- harmony_function_name (habilitar "inferencia de nombre de función de armonía")
-- harmony_regexp_lookbehind (habilitar "harmony regexp lookbehind")
-- harmony_species (habilitar " Símbolo de armonía.especie")
-- harmony_instanceof (habilitar "harmony instanceof support")
-- harmony_default_parameters (habilitar "parámetros predeterminados de armonía")
-- harmony_destructuring_assignment (enable "harmony desestructuring assignment")
-- harmony_destructuring_bind (enable "harmony desestructuring bind")
-- harmony_tostring (habilitar "harmony toString")
-- harmony_regexps (habilitar "harmony regular expression extensions")
-- harmony_unicode_regexps (habilitar "harmony unicode regexps")
-- harmony_sloppy (habilitar "harmony features in sloppy mode")
-- harmony_sloppy_let (enable "harmony let in sloppy mode")
--harmony_sloppy_function (habilitar "harmony sloppy function block scoping")
-- harmony_proxies (habilitar "proxies harmony")
-- harmony_reflect (habilitar "harmony Reflect API")
-- harmony_regexp_subclass (habilitar la subclase "harmony regexp")

 86
Author: Paulpro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-27 21:31:23

Esto debería ser un comentario para la respuesta de @Paulpro, pero no tengo suficiente representante para publicar un comentario.

Para usuarios de Windows el comando equivalente es:

node --v8-options | findstr harmony
 40
Author: CodeVortex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-09 16:28:07

Hasta que se implementen los módulos, puede usar el "transpiler" de Babel para ejecutar su código:

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

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

Desventajas: esto tiene varias desventajas, como el tiempo de compilación adicional, que puede ser significativo y ahora necesita mapas de origen para la depuración; solo digo.

 32
Author: wires,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-12 14:21:37

Como se indicó anteriormente, los módulos ES6 aún no están implementados.

Parece ser un problema no trivial implementar módulos ES6 de una manera que sería compatible con versiones anteriores con módulos JS Comunes, que es el Nodo actual.sintaxis del módulo js.

Sin embargo, hay un borrador de una implementación, que introduce una nueva extensión de archivo - .mjs - para los archivos que contienen módulos ES6.

También hay una contrapropuesta que presenta un enfoque alternativo de declarar todos los archivos con módulos ES6 en paquete.json así:

{
    "modules.root": "/path/to/es6/modules"
}
 16
Author: Роман Парадеев,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-28 21:10:30