O que o `node --harmony` faz?

180

Um aplicativo de nó exigiu que eu executasse o nó com um sinalizador de harmonia, como:

node --harmony app.js

O que é essa bandeira de harmonia? O que faz e por que o aplicativo não pode ser executado sem ele?

Tentei procurar nas opções de linha de comando do nó ( node --help), mas também não fornece detalhes. Os documentos do nó também não ajudaram.

jsalonen
fonte

Respostas:

135

A digitação man nodetem isso na bandeira da harmonia:

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

Assim, --harmonyé um atalho para ativar todos os recursos de harmonia (por exemplo --harmony_scoping, --harmony_proxiesetc.). Nesta postagem do blog , parece que a harmonia ativa novos recursos do ECMAScript 6 no idioma. A razão pela qual seu arquivo não será executado sem harmonia é porque app.jsprovavelmente está usando recursos compatíveis com versões anteriores do novo padrão ECMAScript 6 (como escopo de bloco, proxies, conjuntos, mapas, etc.)

theabraham
fonte
59
vale ressaltar que Harmony é o nome usado para o novo ECMAscript . O espaço para nome Harmony contém recursos que são propostas para esse idioma .
eis
1
Muito obrigado! Tudo faz sentido agora. Btw. alguma idéia do que é equivalente man nodeno Windows? :)
jsalonen
3
@jsalonen não há um, mas você pode fazer > node --v8-optionspara obter o material referido aqui
eis
@eis no Windows, existe uma convenção de uso --help(ou -h); que funciona com a maioria dos programas de console, node -hfunciona, mesmo que não haja um comando man específico. Mas não para os comandos 'DOS'; para aqueles que você pode fazer help dir, help setetc. Sigh.
Jon Coombs
@ JonCoombs eu acho que /?é mais usado com os comandos "dos" antigos. Mas, de qualquer maneira, não há um padrão, acho que já vi, por exemplo, -hmuito usado.
eis
10

Se você deseja executar os recursos do ECMAScript 6 na versão mais antiga do nodejs, pode usar o sinalizador --harmony. A versão mais recente do nó suporta o ES6, portanto, não é necessário o sinalizador --harmony

Raghuveer Jaisingh Varma
fonte
4

Conforme mencionado na documentação do nó, o sinalizador --harmony habilita os recursos não estáveis, mas que devem ser rapidamente estabilizados no ES6

O comportamento atual do sinalizador --harmony no Node.js é ativar apenas os recursos em etapas. Afinal, agora é sinônimo de --es_staging. Como mencionado acima, esses são recursos completos que ainda não foram considerados estáveis. Se você deseja jogar em segurança, especialmente em ambientes de produção, considere remover esse sinalizador de tempo de execução até que seja enviado por padrão na V8 e, consequentemente, no Node.js. Se você mantiver essa opção ativada, você deve estar preparado para atualizações adicionais do Node.js. para quebrar seu código se a V8 alterar sua semântica para seguir mais de perto o padrão.

Inácio André
fonte
0

Todos os recursos do ECMAScript 2015 (ES6) são divididos em três grupos para os recursos de remessa, teste e em andamento:

  • Todos os recursos de remessa , que a V8 considera estáveis, são ativados por padrão no Node.js e NÃO requerem nenhum tipo de sinalizador de tempo de execução.

  • Recursos intermediários , que são recursos quase concluídos que não são considerados estáveis ​​pela equipe V8, exigem um sinalizador de tempo de execução: - harmonia .

  • Os recursos em andamento podem ser ativados individualmente por seu respectivo sinalizador de harmonia, embora isso seja altamente desencorajado, exceto para fins de teste. Nota: esses sinalizadores são expostos pela V8 e potencialmente serão alterados sem nenhum aviso de descontinuação.

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

Aravin
fonte