O Node.js completou 10 anos em 2019. O número de pacotes disponíveis no registro npm ultrapassou a marca de 1 milhão. Todos os anos, o próprio volume de download da plataforma Node.js. aumenta em 40%. Outro marco para o Node.js foi o fato de esse projeto ingressar na OpenJS Foundation. Graças a isso, podemos esperar uma melhoria no status e na estabilidade do projeto, bem como, em geral, desenvolvimentos positivos no campo de interação entre membros da comunidade JavaScript.

É fácil ver que, em um curto período de tempo, mais de um ano, muitas coisas interessantes aconteceram no mundo do Node.js. Todos os anos, o Node.js está ganhando força. Não temos motivos para confiar em mais nada em 2020.
Nas próximas versões do Node.js, encontraremos muitos recursos interessantes. Este material é dedicado às inovações mais significativas da plataforma que podem aparecer em 2020.
Inovações Node.js 13
No início de dezembro de 2019, no momento da redação deste material, o Node.js. 13 é a versão mais recente desta plataforma. Já existem muitos novos recursos e melhorias com os quais você pode começar a experimentar, preparando-se para o novo ano. Aqui estão alguns deles:
- Módulos ECMAScript.
- Suporte do WebAssembly.
- Relatórios de diagnóstico.
- Suporte total à internacionalização. Em particular, estamos falando sobre os formatos de data, hora, números, moedas.
- Suporte ao protocolo QUIC.
- Melhorando o desempenho do mecanismo JavaScript V8.
Antes de entrarmos em detalhes sobre esses recursos, falaremos sobre o que pode ser esperado nas áreas do lançamento de novas versões do Node.js e suporte para versões já lançadas da plataforma.
O processo de lançamento de novas versões do Node.js em 2020
Uma nova versão principal do Node.js é lançada a cada 6 meses. Um em outubro, o outro em abril. Eles são chamados de "versões atuais". No momento da redação deste artigo, a versão atual do Node.js é a 13a, lançada em outubro de 2019.
Versões com números ímpares (v9, v11, v13) são lançadas todo mês de outubro. Eles são relevantes por um tempo relativamente curto, não são considerados prontos para uso na produção. Eles podem ser considerados versões beta da plataforma. Eles foram projetados para testar novos recursos e alterações que caem na próxima versão do Node.js com um número par.
Versões com números pares (v8, v10, v12) são lançadas todo mês de abril. Após o lançamento dessa versão, o lançamento das atualizações para a versão "par" anterior é interrompido. Embora essas versões sejam muito mais estáveis que as "ímpares", o trabalho ativo nelas continua por mais 6 meses. No momento, eles podem ser considerados como estando em um estado candidato à liberação.
Depois que a versão “par” é finalizada em 6 meses, ela entra em uma nova etapa em seu ciclo de vida, transformando-se na versão LTS (Suporte a Longo Prazo, Suporte a Longo Prazo). As versões LTS do Node.js são consideradas prontas para uso na produção. Nos próximos 12 meses, correções de bugs, atualizações de segurança e outras melhorias estão sendo lançadas para essas versões. Tudo isso é feito levando em consideração a preservação da operacionalidade dos aplicativos existentes.
Após o estágio LTS, o estágio de Manutenção começa. Somente correções críticas e atualizações de segurança são lançadas no momento. O estágio de escolta dura 18 meses. Após esse tempo, a versão correspondente vai para o estágio do ciclo de vida útil (EOL, Fim da vida útil) e não é mais suportada.
Ciclo de vida da versão do Node.js.O plano de lançamento esperado para novas versões do Node.js em 2020
Em 2020, podemos esperar o seguinte plano para o lançamento de novas versões do Node.js:
Janeiro a março de 2020
- A versão atual é 13.x, o trabalho ativo está em andamento.
- As versões 10.xe 12.x estão no estado LTS.
Abril 2020
- A versão 14.x se torna atual.
- O trabalho na versão 13.x é interrompido logo após o lançamento do 14.x.
- A versão 10.x está entrando na fase de manutenção.
Outubro 2020
- A versão 15.x é lançada, que se torna atual.
- A versão 14.x está entrando na fase LTS.
- A versão 12.x entra na fase de manutenção.
Planejar o lançamento de novas versões do Node.js em 2020Observe que o final do ciclo de vida do Node.js. 8 está agendado para o final de 2019. O fato é que esta versão da plataforma depende do OpenSSL-1.0.2, e o ciclo de vida desta versão do OpenSSL também termina no final de 2019. Planeje converter aplicativos Node.js.x para Node.js. 10.x ou 12.x, se você ainda não o fez.
Módulos ECMAScript
Na versão 13.2.0, o Node.js. suporta os módulos CommonJS e os novos módulos ECMAScript padrão (módulos ES) sem a necessidade de ferramentas de terceiros. Isso significa que os desenvolvedores podem finalmente usar as instruções de
import
e
export
, as mesmas que eles provavelmente já usam ao criar projetos front-end em JavaScript. Além disso, é importante observar que os módulos ES no Node.js funcionam no modo estrito por padrão. Como resultado, para ativar esse modo, você não precisa adicionar
"use strict";
ao início de cada arquivo
"use strict";
.
No entanto, para informar ao Node.js. que o desenvolvedor usa os módulos ES, algo precisa ser feito. Aqui você pode usar um dos dois métodos mais usados. A primeira delas é que os arquivos recebem a extensão
.mjs
. A segunda é que o arquivo pai mais próximo
package.json
coloca a construção
"type": "module"
.
Tudo fica claro com a primeira abordagem - os arquivos
.js
são renomeados para arquivos
.mjs
. Ao usar a segunda abordagem, no arquivo raiz
package.json
ou em
package.json
, colocado na pasta que contém os módulos ES, adicione a propriedade
type
ao
module
value:
{ "type": "module" }
Outra possibilidade relacionada ao trabalho com os módulos ES é incluí-los no arquivo raiz do projeto
package.json
e alterar as extensões de arquivo usando os módulos CommonJS para
.cjs
.
Pessoalmente, parece-me que o uso das
.cjs
ou
.cjs
não é uma idéia particularmente boa. Portanto, tenho o prazer de ver que, para trabalhar com os módulos ES, é suficiente fazer alterações no arquivo
package.json
.
Importar módulos do WebAssembly
O Node.js agora suporta não apenas módulos ES, mas também a importação de módulos WebAssembly (módulos Wasm). Um módulo wasm é um arquivo que contém código em um formato binário portátil, que pode ser analisado mais rapidamente que um código JavaScript semelhante e executado em uma velocidade semelhante à nativa. Os módulos Wasm podem ser criados desenvolvendo o código-fonte em linguagens como C / C ++, Go, C #, Java, Python, Elixir, Rust e muitos outros.
O suporte aos módulos WebAssembly ainda está em fase experimental. Para habilitar esse recurso, você precisa passar ao Node.js um sinalizador de linha de comando especial ao iniciar o aplicativo:
node --experimental-wasm-modules index.js
Considere um exemplo. Suponha que tenhamos uma biblioteca de processamento de imagens implementada como um módulo Wasm. Para trabalhar com essa biblioteca no código JS, você pode fazer isso:
import * as imageUtils from "./imageUtils.wasm"; import * as fs from "fs"; ( async () => { const image = await fs.promises.readFile( "./image.png" ); const updatedImage = await imageUtils.rotate90degrees( image ); } )();
Aqui importamos o módulo e usamos a função disponível nele.
Os módulos Wasm no Node.js podem ser importados usando a nova instrução dynamic
import()
:
"use strict"; const fs = require("fs"); ( async () => { const imageUtils = await import( "./imageUtils.wasm" ); const image = await fs.promises.readFile( "./image.png" ); const updatedImage = await imageUtils.rotate90degrees( image ); } )();
Interface do sistema WebAssembly
A tecnologia WebAssembly, como JavaScript, foi desenvolvida com a segurança em mente. O código Wasm é executado em um ambiente seguro, às vezes chamado de sandbox. Isso permite proteger o sistema operacional no qual é executado a partir desse código. No entanto, em alguns casos, os módulos Wasm em execução no ambiente Node.js. podem se beneficiar apenas da capacidade de fazer chamadas do sistema.
É aqui que a Interface do sistema WebAssembly (WebAssembly System Interface, WASI) entra em cena. O WASI foi projetado como uma interface padrão para acessar sistemas que executam o código Wasm. Esses sistemas podem incluir aplicativos host, sistemas operacionais e assim por diante.
Você pode encontrar uma
confirmação recente no repositório Node.js., apresentando o suporte inicial ao WASI. Por uma questão de fato, a interface do sistema WebAssembly é um dos recursos interessantes do Node.js, cuja aparência pode ser esperada para 2020.
Suporte ao relatório de diagnóstico
Relatórios de diagnóstico são documentos JSON destinados a pessoas que contêm informações sobre a operação de mecanismos de software. Essas informações podem incluir pilhas de chamadas de função, informações sobre o sistema operacional, dados sobre módulos carregados e outros indicadores úteis destinados a ajudar no suporte a aplicativos. Relatórios semelhantes podem ser criados quando exceções não tratadas, erros críticos ocorrem. Eles podem ser gerados por sinais de processos ou usando a nova API
process.report
. O Node.js pode ser configurado para que os relatórios de diagnóstico sejam salvos na pasta especificada usando os nomes de arquivo especificados.
Agora esse recurso é experimental. Para habilitá-lo, você precisa passar um sinalizador especial ao Node.js ao iniciar o aplicativo:
node --experimental-report --report-uncaught-exception --report-filename=./diagnostics.json index.js
Estendendo o Suporte à Internacionalização
O Node.js.x inclui a versão completa da biblioteca ICU (
International Components for Unicode ). A UTI é um projeto popular maduro. Entre os muitos recursos desta biblioteca, destaca-se o suporte à formatação de números, datas, moedas e hora em um formato localizado. Ela é capaz de executar cálculos relacionados a intervalos de tempo, é capaz de comparar seqüências de caracteres e transcodificar textos do Unicode para outras codificações e vice-versa.
Alguns outros novos recursos do Node.js
Aqui estão alguns recursos mais interessantes do Node.js, cuja aparência pode ser esperada para 2020:
- Suporte ao protocolo QUIC. O QUIC é um protocolo moderno da Internet com o qual você pode estabelecer comunicações confiáveis e produtivas entre aplicativos.
- Suporte aprimorado ao Python 3. Em 2020, poderemos criar módulos Node.js e módulos nativos usando o Python 3.
- Uma versão atualizada do mecanismo JS V8. As versões 7.8 e 7.9 do mecanismo V8 fornecerão maior desempenho do aplicativo e suporte ao Wasm.
- Threads de trabalho de API estável. A API Working Threads permite paralelizar computação intensiva.
Caros leitores! O que você mais espera da plataforma Node.js. em 2020?
