javascript - syntaxerror - La “importación” de ES2015 no funciona en el nodo v6.0.0 con la opción--harmony_modules
syntaxerror: unexpected token export (4)
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 los módulos JS comunes, que es la sintaxis actual del módulo Node.js.
Sin embargo, hay un
draft
de una implementación que introduce una nueva extensión de archivo,
.mjs
, para los archivos que contienen módulos ES6.
Además, hay una counter-proposal que presenta un enfoque alternativo para declarar todos los archivos con módulos ES6 en package.json de esta manera:
{
"modules.root": "/path/to/es6/modules"
}
Estoy usando el nodo v6.0.0 y quería usar ES2016 (ES6).
Sin embargo, me di cuenta de que la sintaxis "importar" no funciona.
¿No es fundamental "importar" para escribir código modular en ES2015?
Traté de ejecutar el nodo con la opción
--harmony_modules
también, pero aún recibí 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 "importar":
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);
Number.js
''use strict'';
export default class Number {
addNumber(num1, num2) {
return num1 + num2;
}
}
También revisé http://node.green/ para ver el es6 compatible, sin embargo, no puedo entender por qué no funciona con la opción --harmony_modules Por favor ayuda.
Esto debería ser un comentario a la respuesta de @ Paulpro pero no tengo suficiente representante para publicar un comentario.
Para los usuarios de Windows , el comando equivalente es:
node --v8-options | findstr harmony
Hasta que se implementen los módulos, puede usar el "transpilador" 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
Ver 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.
Simplemente no están implementados todavía.
El nodo 6.0.0 usa una versión de V8 con la mayoría de las características de ES6 completadas. Lamentablemente, los módulos no son una de esas características completas.
node --v8-options | grep harmony
en progreso las banderas de armonía no están completamente implementadas y generalmente no funcionan:
--es_staging (habilitar características de armonía dignas de prueba (solo
para uso interno
))
--armonía (habilita todas las funciones de armonía completadas)
--harmony_shipping (habilita todas las funciones de armonía enviadas)
--harmony_object_observe (habilitar "armonía Object.observe" (
en progreso
))
--harmony_modules
(habilitar "módulos de armonía" (
en progreso
))
--harmony_function_sent (habilitar "armonía function.sent" (
en progreso
))
--harmony_sharedarraybuffer (habilitar "harmonia sharedarraybuffer" (
en progreso
))
--harmony_simd (habilitar "armonía simd" (
en progreso
))
--harmony_do_expressions (habilitar "expresiones de armonía" (
en progreso
))
--harmony_iterator_close (habilitar "finalización de iterador de armonía" (
en progreso
))
--harmony_tailcalls (habilitar "llamadas de cola de armonía" (
en progreso
))
--armony_object_values_entries (habilitar "armonía Object.values / Object.entries" (
en progreso
))
--harmony_object_own_property_descriptors (habilite "harmony Object.getOwnPropertyDescriptors ()" (
en progreso
))
--harmony_regexp_property (habilitar "clases de propiedad de regexp de armonía unicode" (
en progreso
))
--harmony_function_name (habilitar "inferencia de nombre de función de armonía")
--harmony_regexp_lookbehind (habilitar "armonía regexp lookbehind")
--armony_species (habilitar "armonía Symbol.species")
--harmony_instanceof (habilitar "instancia de armonía de soporte")
--armony_default_parameters (habilitar "parámetros predeterminados de armonía")
--harmony_destructuring_assignment (habilitar "asignación de desestructuración de armonía")
--harmony_destructuring_bind (habilitar "armonía desestructurando enlace")
--harmony_tostring (habilitar "harmonía con la cadena")
--harmony_regexps (habilitar "extensiones de armonía de expresiones regulares")
--harmony_unicode_regexps (habilite "harmonge unicode regexps")
--harmony_sloppy (habilita "funciones de armonía en modo descuidado")
--harmony_sloppy_let (habilita "armonía deja en modo descuidado")
--harmony_sloppy_function (habilita el "alcance de bloque de función descuidado de armonía")
--harmony_proxies (habilitar "proxies de armonía")
--harmony_reflect (habilitar "armonía Reflect API")
--harmony_regexp_subclass (habilitar "subclases de regexp de armonía")