Novidades no Node.js 9
Em maio de 2017 comentamos aqui as principais novidades na versão 8 do Node.js.
Tinha versão nova do npm
, do V8
, o anúncio da N-API
e várias outras coisas interessantes.
Em apenas seis meses de desenvolvimento, já temos uma nova versão com muitas novidades.
O legal dessa versão 9 é que ela é a base para a versão 10, que será LTS e deve sair em outubro de 2018.
A versão 8.9.0 é a atual LTS do Node.js, contando com suporte até dezembro de 2019.
Essa estratégia de liberar um LTS e, ao mesmo tempo, liberar uma nova versão que serve de base para um próximo release é muito eficaz, permitindo que a tecnologia evolua rapidamente e mantendo uma versão estável e com suporte.
Processo de release do Node.js - Créditos da imagem: https://www.joyent.com/blog/nodejs-9-release-summary
Vamos ver algumas das novidades da versão 9:
HTTP 2
Já era possível utilizar http2 no Node.js desde a versão 8.4 com a flag --expose-http2
.
Este é um avanço muito significativo, visto que agora nossas aplicações Node.js podem ficar ainda mais rápidas e robustas.
Um dos principais focos do http2 é, com certeza, a performance; porém, o http2 nos abre uma porta de novas oportunidades.
Performance de http2 comparado com http1 - Créditos da imagem: http://www.cloudways.com/blog/wp-content/uploads/Http2-gif-new.gif
Para quem quiser saber mais sobre a tecnologia, recomendo a leitura do artigo "Http2" do Ilya Grigorik, um dos gurus de performance Web.
A documentação completa do http2 no Node.js está disponível aqui: https://nodejs.org/api/http2.html
Vamos ver um exemplo (direto da documentação):
const http2 = require('http2'); const fs = require('fs'); const server = http2.createSecureServer({ key: fs.readFileSync('localhost-privkey.pem'), cert: fs.readFileSync('localhost-cert.pem') }); server.on('error', (err) => console.error(err)); server.on('socketError', (err) => console.error(err)); server.on('stream', (stream, headers) => { // stream is a Duplex stream.respond({ 'content-type': 'text/html', ':status': 200 }); stream.end('<h1>Hello World</h1>'); }); server.listen(8443);
Vale lembrar que o http2 exige TLS. Então, é necessário ter as chaves do certificado.
Códigos de erro
Na versão 8, o Node.js passou a ter códigos estáticos de erro para facilitar a nossa vida.
A ideia era ir evoluindo isso aos poucos, e agora na versão 9 temos ainda mais códigos de erro.
A lista completa pode ser vista aqui: https://nodejs.org/api/errors.html#errors_node_js_error_codes
Exemplo de uso:
// Erro quando uma sessão é inválida e já foi destruída if (err.code === 'ERR_HTTP2_INVALID_SESSION') { // faça algo aqui }
npm 5.5.1
O npm 5.0 foi introduzido na versão 8 do Node.js.
Agora na versão 9, o npm foi atualizado para a versão 5.5.1 e uma das mais notáveis melhorias é o suporte a two-factor authentication.
Vale lembrar que, mesmo para quem estiver usando versões anteriores do Node.js, é possível atualizar o npm separadamente.
Callbackify
Também mostramos aqui no artigo sobre as novidades do Node.js 8 a introdução do promisify()
, que permite "promisificar" nossas funções com callback.
Agora no Node.js 9 temos a opção de fazer o contrário, converter uma Promise para uma função com callback tradicional.
const { callbackify } = require('util') async function main () { await Promise.resolve() } callbackify(main)(function (err) { if (err) { return console.error(err) } console.log('funcionou') })
Conclusão
É incrível ver a evolução do Node.js e ver como as pessoas e empresas envolvidas estão tomando conta do projeto.
O Node.js hoje, com certeza, ocupa uma posição de destaque no mundo do desenvolvimento e já atua como um dos pilares de inovação na Web.
Essas mudanças rápidas com implementações que, de fato, ajudam desenvolvedores e empresas mostram a maturidade da tecnologia.
Para quem quiser testar o Node.js 9, recomendo a leitura na íntegra do release: https://github.com/nodejs/node/releases/tag/v9.0.0
Algumas soluções de mercado, como o now, já estão suportando a versão, então, já é possível testar em um ambiente próximo à produção.
Além das melhorias citadas aqui, a versão 9 conta com várias correções de bugs e remoção de algumas funcionalidades não mais necessárias.
Referências
https://github.com/nodejs/node/releases/tag/v9.0.0