Sylar Labs

| English | | Português |

ECMAScript 6 e incompatibilidades

February 13, 2017 | 4 Minutos de leitura

O ECMAScript 6 é a ultima versão do padrão ECMAScript, este padrão serve de base para a implementação do JavaScript. O ES6 adiciona algumas features interessantes ao JavaScript, como: Definição de Classe, Argumentos padrões em funções, Constantes, etc. (Você pode encontrar algumas dessas features nesse link).

Apesar de ter sido finalizado em 2015, alguns browsers ainda apresentam incompatibilidade com o novo padrão, e é justamente sobre como diminuir estes problemas que pretendo falar nesse post.

Atualmente, existe um tipo de compilador chamado transpilador(transpiler), que basicamente pega um código-fonte de em uma linguagem de programação e traduz para outra. Seguindo este conceito surgiram algumas libs que traduzem o código JavaScript no padrão ES6 para o ES5, diminuindo problemas de incompatibilidade e permitindo que você possa utilizar os principais recursos do novo padrão. As libs que testei foram a Traceur Compiler, da google, e a Babel.

Traceur Compiler

Você pode utilizar o Traceur Compiler de 2 formas:

  • Incluindo a lib direto na página e o código será automaticamente transpilado para o ES5 ao carregar a página. Para utilizar dessa forma basta incluir os arquivos assim:
<script src="https://google.github.io/traceur-compiler/bin/traceur.js"></script>
<script src="https://google.github.io/traceur-compiler/bin/BrowserSystem.js"></script>
<script src="https://google.github.io/traceur-compiler/src/bootstrap.js"></script>

O arquivo traceur.js é o compilador (transpilador), o BrowserSystem.js e bootstrap.js são responsáveis por aplicar o compilador ao JavaScript da página.

  • Compilando o código em ES6 utilizando o Node:
    • Após clonar o repositório execute o comando para compilar o seu arquivo JS:

    ./traceur --out out/meu_arquivo.js --script meu_arquivo.js

A pasta out é onde ficará o arquivo transpilado de ES6 para ES5.

Um código como:

const a = "1";

function foo(bar=true){
	console.log(bar);
}

Ficaria assim compilado:

$traceurRuntime.ModuleStore.getAnonymousModule(function() {
  "use strict";
  var a = "1";
  function foo() {
    var bar = arguments[0] !== (void 0) ? arguments[0] : true;
    console.log(bar);
  }
  return {};
});

Você também pode testar em tempo real a compilação do código neste link.

Babel JS

O Babel também é muito fácil de usar e possui várias empresas famosas que o utilizam, alguma destas são: Facebook, Netflix, Yahoo, Paypal, Spotify e várias outras.

Para instalar o Babel, você irá precisar ter o Node.js e npm instalado. A instalação do Babel pode ser feita com essa comando:

npm install -g babel

Agora você pode executar o Babel assim:

babel script.js --out-file script-compiled.js

Sendo que o script.js é o arquivo com o padrão ES6 e o script-compiled.js será o arquivo transpilado para o ES5.

Uma vantagem do Babel é a legibilidade do código gerado. Por exemplo:

  • Script original
class Poligono {
  constructor(altura, largura) {
    this.altura = altura;
    this.largura = largura;
  }
}
  • Script compilado
"use strict";

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var Poligono = function Poligono(altura, largura) {
  _classCallCheck(this, Poligono);

  this.altura = altura;
  this.largura = largura;
};

Tente você mesmo através do transpilador online neste link

Conclusão

Não é necessário esperar que todos os browsers sejam compatíveis com o ES6 para começar a desenvolver neste padrão, os transpiladores estão aí para nos ajudar.

Se você conhece outra ferramenta ou lib do tipo, compartilhe nos comentários abaixo.