Что делает node --harmony`?

Приложение node потребовало от меня запускать node с флагом гармонии, например:

node --harmony app.js

Что это за флаг гармонии? Что он делает и почему приложение не может работать без него?

Я попытался просмотреть параметры командной строки node (node --help), но он также не содержит никаких подробностей. node Документы также не помогли.

Ответ 1

Ввод man node имеет это значение на флаге гармонии:

 --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 --harmony является ярлыком для включения всех функций гармонии (например, --harmony_scoping, --harmony_proxies и т.д.) Из это сообщение в блоге, похоже, гармония позволяет использовать новые функции ECMAScript 6 на этом языке. Причина, по которой ваш файл не будет работать без согласования, состоит в том, что app.js, вероятно, использует функции, не поддерживающие обратную совместимость, из нового стандарта ECMAScript 6 (например, область обзора, прокси, наборы, карты и т.д.)

Ответ 3

Как упоминалось в документации Node, флаг -harmony позволяет использовать нестабильные, но для скоростоящих функций ES6

Текущее поведение флага --harmony на Node.js заключается в том, чтобы включить только поэтапные функции. В конце концов, теперь это синоним --es_staging. Как упоминалось выше, это завершенные функции, которые пока не считаются стабильными. Если вы хотите играть в безопасном режиме, особенно в производственных средах, подумайте об удалении этого флага времени выполнения, пока он не отправит по умолчанию на V8 и, следовательно, на Node.js. Если вы поддерживаете это, вы должны быть готовы к дальнейшим обновлениям Node.js, чтобы разбить свой код, если V8 изменяет свою семантику, чтобы более точно следовать стандарту.

Ответ 4

Если вы хотите запускать функции ECMAScript 6 в старой версии nodejs, вы можете использовать флаг --harmony. Последняя версия node поддерживает ES6, поэтому нет необходимости использовать флаг -harmony