¿Qué hace `node --harmony`?

180

Una aplicación de nodo me ha requerido ejecutar un nodo con un indicador de armonía, como:

node --harmony app.js

¿Qué es esta bandera de armonía? ¿Qué hace y por qué la aplicación no puede ejecutarse sin ella?

He intentado buscar en las opciones de la línea de comandos del nodo ( node --help), pero tampoco proporciona ningún detalle. Los documentos de nodo tampoco fueron de ninguna ayuda.

jsalonen
fuente

Respuestas:

135

Escribir man nodetiene esto en la bandera de armonía:

 --harmony_typeof (enable harmony semantics for typeof)
       type: bool  default: false
 --harmony_scoping (enable harmony block scoping)
       type: bool  default: false
 --harmony_modules (enable harmony modules (implies block scoping))       
        type: bool  default: false
 --harmony_proxies (enable harmony proxies)       
        type: bool  default: false
 --harmony_collections (enable harmony collections  (sets,  maps,  andweak maps))
       type: bool  default: false 
 --harmony (enable all harmony features (except typeof))
       type: bool  default: false

Por --harmonylo tanto, es un acceso directo para habilitar todas las características de armonía (por ejemplo --harmony_scoping, --harmony_proxiesetc.). De esta publicación de blog , parece que la armonía permite nuevas características de ECMAScript 6 en el lenguaje. La razón por la que su archivo no se ejecutará sin armonía es porque app.jsprobablemente esté usando características no compatibles con versiones anteriores del nuevo estándar ECMAScript 6 (como alcance de bloque, proxies, conjuntos, mapas, etc.)

theabraham
fuente
59
Vale la pena mencionar que Harmony es el nombre utilizado para el nuevo ECMAscript . El espacio de nombres de Harmony contiene características que son propuestas para ese lenguaje .
EIS
1
¡Muchas gracias! Todo tiene sentido ahora. Por cierto. alguna idea de cuál es el equivalente de man nodeen Windows? :)
jsalonen
3
@jsalonen no hay uno, pero se puede hacer > node --v8-optionspara obtener la materia a que se refiere aquí
EIS
@eis en Windows hay una convención de usar --help(o -h); eso funciona con la mayoría de los programas de consola, así que node -hfunciona, aunque no haya un comando man específico. Pero no para los comandos 'DOS' mismos; para aquellos que puede hacer help dir, help setetc. suspiro.
Jon Coombs
@JonCoombs creo que /?se usa más con los viejos comandos "dos". Pero de todos modos no hay un estándar, no creo que haya visto, por ejemplo, que se -huse mucho.
EIS
10

Si desea ejecutar las características de ECMAScript 6 en una versión anterior de nodejs, puede usar el indicador --harmony. La última versión del nodo es compatible con ES6, por lo que no es necesario usar el indicador

Raghuveer Jaisingh Varma
fuente
4

Como se menciona en la documentación del nodo, el indicador --harmony habilita las características no estables, pero pronto serán estables de ES6

El comportamiento actual del indicador --harmony en Node.js es habilitar solo las funciones preparadas. Después de todo, ahora es sinónimo de --es_staging. Como se mencionó anteriormente, estas son características completas que aún no se han considerado estables. Si desea jugar de forma segura, especialmente en entornos de producción, considere eliminar este indicador de tiempo de ejecución hasta que se envíe por defecto en V8 y, en consecuencia, en Node.js. Si mantiene esto habilitado, debe estar preparado para futuras actualizaciones de Node.js para romper su código si V8 cambia su semántica para seguir más de cerca el estándar.

Ignacio Andrew
fuente
0

Todas las características de ECMAScript 2015 (ES6) se dividen en tres grupos para las características de envío, por etapas y en curso:

  • Todas las funciones de envío , que V8 considera estables, están activadas de manera predeterminada en Node.js y NO requieren ningún tipo de indicador de tiempo de ejecución.

  • Las características por etapas , que son características casi completas que el equipo V8 no considera estables, requieren un indicador de tiempo de ejecución: - armonía .

  • Las características en progreso pueden activarse individualmente mediante su respectivo indicador de armonía, aunque esto no se recomienda a menos que sea para fines de prueba. Nota: estos indicadores están expuestos por V8 y potencialmente cambiarán sin previo aviso de desaprobación.

fuente : https://nodejs.org/en/docs/es6/

Aravin
fuente