Que fait `node --harmony`?


181

Une application de nœud m'a obligé à exécuter un nœud avec un indicateur d'harmonie, comme:

node --harmony app.js

Quel est ce drapeau d'harmonie? Que fait-il et pourquoi l'application ne peut-elle pas fonctionner sans elle?

J'ai essayé d'examiner les options de ligne de commande des nœuds ( node --help), mais cela ne fournit pas non plus de détails. Les documents sur les nœuds n'étaient d'aucune utilité non plus.

Réponses:


137

La frappe man nodea ceci sur l'indicateur d'harmonie:

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

Il en --harmonyva de même pour un raccourci pour activer toutes les fonctionnalités d'harmonie (par exemple--harmony_scoping , --harmony_proxies, etc.) à partir de ce billet de blog , il semble harmonie permet de nouvelles fonctionnalités ECMAScript 6 dans la langue. La raison pour laquelle votre fichier ne fonctionnera pas sans l'harmonie est qu'il app.jsutilise probablement des fonctionnalités non rétrocompatibles du nouveau standard ECMAScript 6 (comme la portée des blocs, les proxies, les ensembles, les cartes, etc.)


61
il est à noter que Harmony est le nom utilisé pour le nouvel ECMAscript . L'espace de noms Harmony contient des fonctionnalités qui sont des propositions pour cette langue .
eis

1
Merci beaucoup! Tout s'explique maintenant. Btw. des idées de quoi l'équivalent man nodedans Windows? :)
jsalonen

3
@jsalonen il n'y en a pas, mais vous pouvez faire > node --v8-optionspour obtenir les informations référencées ici
eis

@eis dans Windows, il existe une convention d'utilisation de --help(ou -h); qui fonctionne avec la plupart des programmes de console, donc node -hfonctionne, même s'il n'y a pas de commande man spécifique. Mais pas pour les commandes 'DOS' elles-mêmes; pour ceux que vous pouvez faire help dir, help setetc. Soupir.
Jon Coombs

@JonCoombs, je pense, /?est plus utilisé avec les anciennes commandes "dos". Mais de toute façon il n'y a pas de norme, je ne pense pas avoir vu par exemple -hbeaucoup utilisée.
eis

10

Si vous souhaitez exécuter les fonctionnalités ECMAScript 6 dans une ancienne version de nodejs, vous pouvez utiliser l'indicateur --harmony. La dernière version du nœud prend en charge ES6 donc pas besoin de l'indicateur --harmony



4

Comme mentionné dans la documentation du nœud, l'indicateur --harmony active les fonctionnalités non stables mais bientôt stabilisées de ES6

Le comportement actuel de l'indicateur --harmony sur Node.js est d'activer uniquement les fonctionnalités par étapes. Après tout, c'est maintenant synonyme de --es_staging. Comme mentionné ci-dessus, il s'agit de fonctionnalités achevées qui n'ont pas encore été considérées comme stables. Si vous voulez jouer en toute sécurité, en particulier sur les environnements de production, envisagez de supprimer cet indicateur d'exécution jusqu'à ce qu'il soit livré par défaut sur V8 et, par conséquent, sur Node.js. Si vous gardez cette option activée, vous devez être prêt pour d'autres mises à niveau de Node.js pour casser votre code si V8 change sa sémantique pour suivre de plus près la norme.


1

Toutes les fonctionnalités d'ECMAScript 2015 (ES6) sont divisées en trois groupes pour les fonctionnalités d'expédition, par étapes et en cours:

  • Toutes les fonctionnalités d'expédition , que V8 considère comme stables, sont activées par défaut sur Node.js et ne nécessitent aucun type d'indicateur d'exécution.

  • Les fonctionnalités par étapes , qui sont des fonctionnalités presque achevées qui ne sont pas considérées comme stables par l'équipe V8, nécessitent un indicateur d'exécution: - harmonie .

  • Les fonctionnalités en cours peuvent être activées individuellement par leur indicateur d'harmonie respectif, bien que cela soit fortement déconseillé sauf à des fins de test. Remarque: ces indicateurs sont exposés par la V8 et seront potentiellement modifiés sans préavis de dépréciation.

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.