What does `node –harmony` do?

What does `node –harmony` do?

A node application has required me to run node with a harmony flag, like:
node –harmony app.js

What is this harmony flag? What does it do and why can’t the app run without it?
I’ve tried looking into node command-line options (node –help), but it doesn’t provide any details either. Node docs weren’t of any help either.


Solution 1:

Typing man node has this on the harmony 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 --harmony is a shortcut to enable all the harmony features (e.g. --harmony_scoping, --harmony_proxies, etc.) From this blog post, it seems harmony enables new ECMAScript 6 features in the language. The reason your file won’t run without harmony is because app.js is probably using non-backward compatible features from the new ECMAScript 6 standard (like block scoping, proxies, sets, maps, etc.)

Related:  How to convert characters to HTML entities using plain JavaScript

Solution 2:

If you want to run ECMAScript 6 features in older version of nodejs, you can use –harmony flag.
Latest version of node supports ES6 so no need of –harmony flag

Solution 3:

It enables harmony modules in node js:

Solution 4:

As mentioned in the Node Documentation, –harmony flag enables the non stable but tobe soon stabled features of ES6

The current behaviour of the –harmony flag on Node.js is to enable staged features only. After all, it is now a synonym of –es_staging. As mentioned above, these are completed features that have not been considered stable yet. If you want to play safe, especially on production environments, consider removing this runtime flag until it ships by default on V8 and, consequently, on Node.js. If you keep this enabled, you should be prepared for further Node.js upgrades to break your code if V8 changes their semantics to more closely follow the standard.