Was macht `node --harmony`?


180

Für eine Knotenanwendung musste ich einen Knoten mit einem Harmony-Flag ausführen, z.

node --harmony app.js

Was ist diese Harmonie-Flagge? Was macht es und warum kann die App ohne sie nicht ausgeführt werden?

Ich habe versucht, die Befehlszeilenoptionen für Knoten ( node --help) zu untersuchen, aber sie enthalten auch keine Details. Knotendokumente halfen auch nicht weiter.

Antworten:


135

Beim Tippen man nodesteht dies auf dem Harmonie-Flag:

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

So --harmonyeine Verknüpfung ist es, all Harmonie - Funktionen zu aktivieren (zB --harmony_scoping, --harmony_proxiesusw.) Aus dieser Blog - Post , so scheint es , Harmonie neue ECMAScript 6 Funktionen in der Sprache ermöglicht. Der Grund, warum Ihre Datei nicht ohne Harmonie ausgeführt wird, app.jsliegt wahrscheinlich darin, dass nicht abwärtskompatible Funktionen aus dem neuen ECMAScript 6-Standard verwendet werden (wie Block Scoping, Proxys, Sets, Maps usw.).


59
Es ist erwähnenswert, dass Harmony der Name ist, der für das neue ECMAscript verwendet wird . Der Harmony-Namespace enthält Funktionen, die Vorschläge für diese Sprache sind .
uvb

1
Vielen Dank! Es macht jetzt alles Sinn. Übrigens. Irgendwelche Ideen, was entspricht man nodeWindows? :)
jsalonen

3
@jsalonen gibt es keine, aber Sie können tun > node --v8-options, um die hier genannten Sachen zu bekommen
Eis

@eis in Windows gibt es eine Konvention der Verwendung von --help(oder -h); Das funktioniert mit den meisten Konsolenprogrammen node -h, auch wenn es keinen bestimmten man-Befehl gibt. Aber nicht für 'DOS'-Befehle selbst; für diejenigen, die Sie tun help dirkönnen help set, etc. Seufz.
Jon Coombs

@ JonCoombs Ich denke, /?wird eher mit alten "dos" -Befehlen verwendet. Aber es gibt sowieso keinen Standard, ich glaube nicht, dass ich zum Beispiel -hviel verwendet habe.
Eis

10

Wenn Sie ECMAScript 6-Funktionen in einer älteren Version von nodejs ausführen möchten, können Sie das Flag --harmony verwenden. Die neueste Version des Knotens unterstützt ES6, sodass kein --harmony-Flag erforderlich ist



4

Wie in der Knotendokumentation erwähnt, aktiviert das Flag --harmony die nicht stabilen, aber bald stabilisierbaren Funktionen von ES6

Das aktuelle Verhalten des Flags --harmony in Node.js besteht darin, nur bereitgestellte Funktionen zu aktivieren. Immerhin ist es jetzt ein Synonym für --es_staging. Wie oben erwähnt, handelt es sich hierbei um abgeschlossene Funktionen, die noch nicht als stabil eingestuft wurden. Wenn Sie auf Nummer sicher gehen möchten, insbesondere in Produktionsumgebungen, sollten Sie dieses Laufzeitflag entfernen, bis es standardmäßig auf V8 und folglich auf Node.js ausgeliefert wird. Wenn Sie diese Option aktiviert lassen, sollten Sie auf weitere Upgrades von Node.j vorbereitet sein, um Ihren Code zu beschädigen, wenn V8 die Semantik ändert, um dem Standard besser zu entsprechen.


0

Alle ECMAScript 2015 (ES6) -Funktionen sind in drei Gruppen für Versand-, inszenierte und laufende Funktionen unterteilt:

  • Alle Versandfunktionen , die V8 als stabil erachtet, sind in Node.js standardmäßig aktiviert und erfordern KEIN Laufzeitflag.

  • Bereitgestellte Features , bei denen es sich um fast abgeschlossene Features handelt, die vom V8-Team nicht als stabil angesehen werden, erfordern ein Laufzeitflag: - Harmonie .

  • In Bearbeitung befindliche Funktionen können einzeln über das jeweilige Harmonie-Flag aktiviert werden. Dies wird jedoch nur zu Testzwecken dringend empfohlen. Hinweis: Diese Flags werden von V8 verfügbar gemacht und können sich möglicherweise ohne Hinweis auf eine Ablehnung ändern.

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.