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

181

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

node --harmony app.js

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

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

Jsalonen
источник

Ответы:

137

Typing 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

Таким образом , --harmonyэто ярлык , чтобы включить все функции гармонии (например --harmony_scoping, --harmony_proxiesи т.д.) из этого блога , кажется , гармония дает новые ECMAScript 6 функций в языке. Причина, по которой ваш файл не будет работать без гармонии, заключается в том, что app.jsон, вероятно, использует функции, не имеющие обратной совместимости из нового стандарта ECMAScript 6 (например, область видимости блока, прокси, наборы, карты и т. Д.)

Теавраам
источник
61
Стоит упомянуть, что Harmony - это имя, используемое для нового ECMAscript . Пространство имен Harmony содержит функции, которые являются предложениями для этого языка .
eis
1
Большое спасибо! Все это имеет смысл сейчас. Кстати. есть идеи, что эквивалентно man nodeв Windows? :)
jsalonen
3
@jsalonen нет ни одного, но вы можете сделать, > node --v8-optionsчтобы получить материал, упомянутый здесь
eis
@eis в Windows существует соглашение об использовании --help(или -h); который работает с большинством консольных программ, поэтому node -hработает, даже если нет конкретной команды man. Но не для самих команд «DOS»; для тех , что вы можете сделать help dir, help setи т.д. Вздох.
Джон Кумбс
@JonCoombs, я думаю /?, больше используется со старыми командами "dos". Но в любом случае нет единого стандарта, я не думаю, что видел, например, -hмного используемого.
eis
10

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


источник
4

Как упоминалось в документации по узлу, флаг --harmony включает нестабильные, но вскоре стабильные функции ES6.

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

Игнатий Андрей
источник
1

Все функции ECMAScript 2015 (ES6) разделены на три группы для функций доставки, поэтапной и незавершенной работы:

  • Все функции доставки , которые V8 считает стабильными, по умолчанию включены на Node.js и НЕ требуют каких-либо флагов времени выполнения.

  • Поэтапные функции , которые представляют собой почти завершенные функции, которые команда V8 не считает стабильными, требуют флага выполнения: - harmony .

  • Текущие функции могут быть активированы индивидуально с помощью соответствующего флага гармонии, хотя это крайне не рекомендуется, кроме случаев тестирования. Примечание: эти флаги доступны в V8 и могут быть изменены без уведомления об устаревании.

источник : https://nodejs.org/en/docs/es6/

Аравин
источник