Co robi `node --harmony`?

180

Aplikacja węzła wymagała ode mnie uruchomienia węzła z flagą harmonii, na przykład:

node --harmony app.js

Co to za flaga harmonii? Co robi i dlaczego aplikacja nie może się bez niego uruchomić?

Próbowałem sprawdzić opcje wiersza poleceń węzła ( node --help), ale nie zawiera on również żadnych szczegółów. Dokumenty węzłów również nie były pomocne.

jsalonen
źródło

Odpowiedzi:

135

Wpisanie man nodema to na fladze harmonii:

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

Więc --harmonyjest to skrót, aby włączyć wszystkie funkcje harmoniczne (np --harmony_scoping, --harmony_proxiesetc.) Od tego blogu , wydaje harmonia umożliwia ECMAScript 6 nowych możliwości w języku. Plik nie uruchamia się bez harmonii, ponieważ app.jsprawdopodobnie używa niekompatybilnych wstecz funkcji z nowego standardu ECMAScript 6 (takich jak zakres bloków, proxy, zestawy, mapy itp.)

theabraham
źródło
59
warto wspomnieć, że Harmony to nazwa nowego skryptu ECMA . Przestrzeń nazw Harmony zawiera funkcje, które są propozycjami dla tego języka .
eis
1
Wielkie dzięki! Teraz wszystko nabiera sensu. Btw. jakieś pomysły, co jest odpowiednikiem man nodew systemie Windows? :)
jsalonen,
3
@ jsalonen nie ma, ale możesz zrobić, > node --v8-optionsaby dostać rzeczy, o których tu mowa
eis
@eis w systemie Windows istnieje konwencja używania --help(lub -h); działa z większością programów konsolowych, więc node -hdziała, nawet jeśli nie ma określonego polecenia man. Ale nie dla samych poleceń „DOS”; dla tych, którzy mogą to zrobić help dir, help setitp Ech.
Jon Coombs
@JonCoombs Myślę, że /?jest częściej używany ze starymi poleceniami „dos”. Ale w każdym razie nie ma jednego standardu, nie sądzę, że widziałem na przykład -hwiele używanego.
eis
10

Jeśli chcesz uruchomić funkcje ECMAScript 6 w starszej wersji nodejs, możesz użyć flagi --harmony. Najnowsza wersja węzła obsługuje ES6, więc nie trzeba flagi --harmony

Raghuveer Jaisingh Varma
źródło
4

Jak wspomniano w Dokumentacji węzła, flaga --harmony włącza niestabilne, ale wkrótce stabilne funkcje ES6

Obecne zachowanie flagi --harmony w Node.js polega na włączeniu tylko funkcji etapowych. W końcu jest teraz synonimem --es_staging. Jak wspomniano powyżej, są to kompletne funkcje, które nie zostały jeszcze uznane za stabilne. Jeśli chcesz grać bezpiecznie, szczególnie w środowiskach produkcyjnych, rozważ usunięcie tej flagi środowiska uruchomieniowego, dopóki nie zostanie domyślnie dostarczona w wersji 8, aw konsekwencji w Node.js. Jeśli włączysz tę opcję, powinieneś być przygotowany na dalsze aktualizacje Node.js, aby złamać kod, jeśli V8 zmieni ich semantykę, aby ściślej przestrzegać standardu.

Ignacy Andrzej
źródło
0

Wszystkie funkcje ECMAScript 2015 (ES6) są podzielone na trzy grupy dla funkcji wysyłkowej, etapowej i w toku:

  • Wszystkie funkcje wysyłki , które V8 uważa za stabilne, są domyślnie włączone w Node.js i NIE wymagają żadnych flag wykonawczych.

  • Funkcje etapowe , które są prawie ukończonymi funkcjami, które nie są uważane za stabilne przez zespół V8, wymagają flagi czasu wykonywania: - harmonia .

  • W toku funkcje mogą być aktywowane indywidualnie za pomocą odpowiedniej flagi harmonii, chociaż jest to wysoce odradzane, chyba że do celów testowych. Uwaga: te flagi są widoczne w wersji V8 i potencjalnie mogą ulec zmianie bez powiadomienia o wycofaniu.

źródło : https://nodejs.org/en/docs/es6/

Aravin
źródło