Nos últimos meses tenho estudado e estou fazendo alguns experimentos com ES6 tanto no browser quanto no Node.
Para um dos testes, quero rodar via linha de comando um programa escrito em node.
Para rodar um código no Node usando a nova especificação, é preciso passar a flag –harmony para que o node rode com tal suporte.
É bem fácil:
node --harmony --use-strict myfile.js
Para apenas rodar o código, isto basta.
Mas para casos onde se está criando uma ferramenta de linha de comando por exemplo, isto não é suficiente e não atende a real necessidade.
Procurei alternativas, e a que me pareceu mais simples (e funciona) é a seguinte:
Criar um shell script que inicia o node com a flag apropriada, no caso –harmony.
No meu caso estou no Ubuntu, e o passo-a-passo é mais ou menos este:
- Crie um arquivo com um nome qualquer, por exemplo, nodeHarmony, como sugere a solução do link acima.
- Este arquivo deve estar no seu search path /usr/local/bin
- O conteúdo do arquivo deve ser este:
#!/bin/sh
node --use-strict --harmony "$@"
Dê a permissão necessária para o script:
sudo chmod a+x
Pronto, isto deve fazer com que nodeHarmony esteja disponível.
Para testar, usando o mesmo exemplo citado acima:
nodeHarmony myfile.js
Note que a única diferença é que não passamos a flag no comando.
Mas para que tudo isso?
Quando estamos criando uma ferramenta de linha de comando com node, precisamos informar que o script deve ser rodado com node, ficando algo assim:
#!/usr/bin/env node
var program = require('commander');
program
.version('0.0.1');
Neste caso, o node está iniciando sem a flag –harmony, tornando o uso das features ES6 indisponíveis na minha ferramenta.
Com o passo-a-passo feito acima, conseguimos chegar no objetivo, basta alterar o script:
#!/usr/bin/env nodeHarmony
var program = require('commander');
let foo = 'bar';
console.log(foo);
program
.version('0.0.1');
Feito!