Novidades no Node.js 8
E chegou a oitava versão do Node.js!
Quem acompanha o projeto de perto, sabe que a plataforma vem crescendo e evoluindo cada vez mais.
Em 2016, anunciamos aqui no portal o que viria de novidade na versão 7.
Novamente temos um release cheio de novidades, a começar pela nomenclatura.
Eu sempre me perguntei, o que farão quando chegar na V8?
Por trás do Node.js, está o famoso V8. O Node.js desde o início utiliza o "v" em suas versões: Node.js v5, Node.js v6, Node.js v7. E na 8?
Para não confundir, o pessoal optou pelo mais coerente, tirar o "V" da frente, sendo assim, a versão atual é a Node.js 8.
Vamos as principais novidades:
npm 5
Na última semana, o npm anunciou o release do npm v5.0.0, trazendo várias melhorias para o gerenciador de pacotes.
O Node.js 8 já inclui por padrão esta nova versão.
V8 5.8
O Node.js 8 agora vem com a versão 5.8 do V8, o que é bem relevante, pois agora temos todos os benefícios da engine incluídos nesta versão.
O mais legal desta atualização é o fato de que a API binária do V8 5.8 será totalmente compatível com futuras versões, o que torna o desenvolvimento de addons muito mais estável.
Além disso, durante o tempo de vida do Node.js 8, o plano é atualizar o V8 para as versões 5.9 e 6.0.
N-API
Pegando o gancho nos addons, agora o Node.js possui uma nova API experimental que deve substituir o pacote nan, comumente utilizado para estas tarefas.
A N-API permitirá que addons nativos sejam compilados uma vez e reutilizados em múltiplas versões do Node.js.
Será possível rodar estes addons em versões diferentes do V8 e inclusive em outras engines, como o Chakra Core, da Microsoft.
async_hooks
Ainda experimental, o módulo async_hooks permite a monitoração do event loop do Node.js.
WHATWG URL parser
Wow! Agora o Node.js conta com total suporte da nova spec de URL.
O mais legal disso é que agora temos uma equalização desta API tanto no server como no client.
O exemplo abaixo funciona tanto no Node.js 8 como nas versões mais modernas dos navegadores (no navegador não precisa fazer require).
const URL = require('url').URL; const myURL = new URL('/a/path', 'https://braziljs.org/');
![screenshot-from-2017-05-30-20-13-37 screenshot-from-2017-05-30-20-13-37](https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc528d2a-1670-40a6-8e5d-680ee847dce7_498x289.png)
Melhor suporte para Promises
Essa me pegou de surpresa!
Agora dentro do objeto util
nós temos o método promisify()
. Muito legal!
Não precisaremos de pacotes alternativos para "promisificar" nossas funções com callback.
O método promisify
encapsula a função e retorna uma Promise
.
Veja um exemplo abaixo, tirado do próprio artigo do Node.js sobre o release da versão 8.
const fs = require('fs'); const util = require('util'); const readfile = util.promisify(fs.readFile); readfile('/some/file') .then((data) => { /** ... **/ }) .catch((err) => { /** ... **/ });
Agora, nativamente, podemos usar Promises em tudo e ainda usar async/await (a partir do Node.js V7.6) :)
Códigos de erro
Essa é muito boa também.
Iniciando agora, o Node.js passará a ter códigos estáticos de erro.
A ideia é que no futuro todo erro tenha o seu código, visando a facilitar um pouco a caça aos bugs na hora do desenvolvimento.
LTS
Em outubro será liberado o Carbon, LTS do Node.js 8.
Na imagem abaixo dá para entender bem os planos do Node.js para versões de Long Term Support.
![lts lts](http://159.89.224.26/wp-content/uploads/2017/05/lts-940x490.png)
Conclusão
É muito bom ver que o Node.js está evoluindo e amadurecendo desta maneira.
Essa equalização com o todo o ecossistema e o trabalho lado a lado com o time do V8, do npm e comunidade, mostra o profissionalismo atingido na plataforma.
Para quem, assim como eu, acompanha o projeto desde o início, é incrível ver até onde o Node.js chegou.
Vida longa ao Node.js <3
Tem várias outras novidades nesta versão, a lista completa pode ser vista no release oficial: https://nodejs.org/en/blog/release/v8.0.0/