Cosa fa `node --harmony`?


180

Un'applicazione nodo mi ha richiesto di eseguire il nodo con un flag di armonia, come:

node --harmony app.js

Cos'è questa bandiera dell'armonia? Cosa fa e perché l'app non può essere eseguita senza di essa?

Ho provato a esaminare le opzioni della riga di comando del nodo ( node --help), ma non fornisce neanche alcun dettaglio. Nemmeno i documenti del nodo erano di alcun aiuto.

Risposte:


135

Digitando man nodeha questo sulla bandiera dell'armonia:

 --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

Quindi --harmonyè una scorciatoia per abilitare tutte le funzionalità di armonia (ad es --harmony_scoping. --harmony_proxies, Ecc.) Da questo post sul blog , sembra che l'armonia abiliti le nuove funzionalità di ECMAScript 6 nella lingua. Il motivo per cui il tuo file non verrà eseguito senza armonia è perché app.jsprobabilmente sta usando funzionalità non compatibili con le versioni precedenti del nuovo standard ECMAScript 6 (come scoping a blocchi, proxy, set, mappe, ecc.)


59
vale la pena ricordare che Harmony è il nome usato per il nuovo script ECMA . Lo spazio dei nomi Harmony contiene funzionalità che sono proposte per quella lingua .
eis,

1
Molte grazie! Adesso ha tutto senso. Btw. qualche idea di cosa equivale man nodein Windows? :)
jsalonen,

3
@jsalonen non ce n'è uno, ma puoi fare > node --v8-optionsper ottenere le cose indicate qui
eis

@eis in Windows esiste una convenzione di utilizzo --help(o -h); funziona con la maggior parte dei programmi per console, quindi node -hfunziona, anche se non esiste un comando man specifico. Ma non per i comandi 'DOS' stessi; per coloro che si può fare help dir, help sete così via Sigh.
Jon Coombs

@JonCoombs Penso che /?sia più usato con i vecchi comandi "dos". Ma comunque non esiste uno standard, non credo di aver visto ad esempio -husato molto.
eis,

10

Se si desidera eseguire le funzioni ECMAScript 6 nella versione precedente di nodejs, è possibile utilizzare --harmony flag. L'ultima versione del nodo supporta ES6, quindi non è necessario il flag --harmony



4

Come menzionato nella documentazione del nodo, --harmony flag abilita le funzionalità non stabili ma presto stabili di ES6

L'attuale comportamento del flag --harmony su Node.js è di abilitare solo le funzionalità a fasi. Dopotutto, ora è sinonimo di --es_staging. Come accennato in precedenza, queste sono funzionalità complete che non sono state ancora considerate stabili. Se vuoi giocare in sicurezza, specialmente negli ambienti di produzione, considera di rimuovere questo flag di runtime fino a quando non viene spedito di default su V8 ​​e, di conseguenza, su Node.js. Se lo mantenete abilitato, dovreste essere pronti per ulteriori aggiornamenti di Node.js per violare il codice se V8 modifica la loro semantica per seguire più da vicino lo standard.


0

Tutte le funzionalità di ECMAScript 2015 (ES6) sono suddivise in tre gruppi per le funzioni di spedizione, organizzazione temporanea e in corso:

  • Tutte le funzionalità di spedizione , che V8 considera stabili, sono attivate per impostazione predefinita su Node.js e NON richiedono alcun tipo di flag di runtime.

  • Le funzioni in scena , che sono quasi completate e non considerate stabili dal team V8, richiedono un flag di runtime: - armonia .

  • Le funzioni in corso possono essere attivate individualmente dalla rispettiva bandiera di armonia, sebbene ciò sia altamente scoraggiato se non a scopo di test. Nota: questi flag sono esposti da V8 e potrebbero cambiare senza preavviso.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.