>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
Rust

Como Tornar o Node.js Rápido e Conveniente Sem Trocar para o Bun

Os motores Bun e Deno reimaginaram a experiência familiar de desenvolvimento JS. Suporte nativo a TypeScript, lançamento instantâneo de testes e um gerenciador de pacotes reativo estabeleceram um novo padrão de qualidade. No entanto, nem todos estão prontos para migrar sua produção real para um novo runtime. Addons específicos de C++, nuances de comportamento de módulos e legado acumulado mantêm a maioria dos projetos no Node.js clássico.

A equipe do projeto Nub decidiu seguir uma abordagem diferente. Em vez de criar outro runtime isolado, eles escreveram um utilitário em Rust que turboalimenta o Node padrão.

Qual é a ideia

Desenvolvedores frequentemente sobrecarregam seus projetos com dezenas de utilitários: 4 ou 5 para executar TypeScript, 6 ou 7 para gerenciamento de versão do Node.js, 8 para pacotes e 9 para variáveis de ambiente. Como resultado, iniciar qualquer script incorre em centenas de milissegundos de atraso antes mesmo do seu código começar a executar.

Nub combina todas essas funções em um único binário Rust. A ferramenta atua como uma camada transparente entre o desenvolvedor e o Node.js. O V8 e os módulos padrão permanecem inalterados internamente, mas todas as ferramentas circundantes funcionam com desempenho de código compilado.

0

Executando TypeScript e seleção automática de versão

O comando 10 executa 11, 12, 13, 14, 15 e outros formatos sem nenhuma configuração de ferramenta de build.

Por baixo dos panos, ele usa o rápido parser Rust Oxc. Para transpilação e resolução correta de caminhos (incluindo 16 e imports sem extensões), o Nub aproveita os pontos de extensão modernos do Node.js: 17 preload e o mecanismo 18.

Um aspecto interessante se relaciona ao gerenciamento de versões. Ao iniciar um arquivo, o Nub verifica arquivos 19, 20 ou a seção 21 em 22. Se a versão necessária do Node não estiver disponível localmente, o utilitário baixa para o cache e executa o código através dela.

1

O Nub também remove automaticamente flags experimentais para recursos mais recentes do Node.js. Trabalhar com 23, 24 ou 25 funciona imediatamente sem precisar especificar flags de CLI.

Acelerando scripts e iniciando binários

Toda vez que 26 ou 27 é chamado, um processo Node.js completo é iniciado apenas para ler 28 e invocar o script shell apropriado. Aguardar a inicialização do ambiente JS cria um gargalo perceptível.

Como 29 é escrito em Rust, não há fase de inicialização JavaScript. Scripts são capturados instantaneamente.

Nos benchmarks dos desenvolvedores, iniciar um script quente através de 30 leva cerca de 14 milissegundos. Para comparação, 31 tem isso em torno de 330 milissegundos, e 32 excede 440 milissegundos.

O utilitário 33 funciona de forma semelhante, substituindo 34 e 35. Ao chamar um binário de 36, ele não cria um processo Node.js intermediário extra, tornando-o aproximadamente 19 vezes mais rápido que 37.

2

Se um pacote não estiver disponível localmente, 38 baixa do registro, executa e remove os arquivos temporariamente criados.

Gerenciador de pacotes e suporte ao Corepack

O comando 39 lida com a busca de dependências. Ele é construído no motor Aube, que pode funcionar em modo de compatibilidade com arquivos lock existentes.

Se você entrar em um projeto com 40, o Nub respeita as configurações do pnpm, lê 41 e constrói o grafo de dependências sem conflitos. O mesmo se aplica a projetos com 42 ou 43.

Vários recursos de segurança ao instalar pacotes:

  1. Bloqueio automático de scripts 44 por padrão.
  2. Verificação de versão do pacote contra o banco de dados de vulnerabilidades osv.dev durante a resolução do grafo.
  3. Restrição de idade mínima de lançamento de 24 horas para proteção contra ataques na cadeia de suprimentos.

Para trabalhar com múltiplas versões do gerenciador de pacotes, o comando 45 está disponível. Ele cria shims globais para 46, 47 e 48. Esta é uma substituição útil para o Corepack, que foi removido do Node.js a partir da versão 25.

Uso prático

A ferramenta não requer mudança na estrutura do seu projeto ou abandono da sua infraestrutura existente. Você pode instalá-lo globalmente e usá-lo apenas para depuração rápida ou execução de utilitários CLI locais.

3

Em pipelines do GitHub Actions, o 49 padrão é substituído por 50. Isso fornece uma interface consistente e acelera a execução das etapas de build através de cache rápido e instalação de dependências.

Em resumo

O Nub se mostra um compromisso sólido para equipes que apreciam a conveniência do Bun, mas enfrentam restrições técnicas que impedem它们 de deixar o Node.js. O utilitário consolida uma coleção dispersa de ferramentas CLI, acelera comandos diários e não força você a reescrever uma única linha de código.

O projeto é bastante novo, mas já acumulou cerca de 3,8 mil estrelas no GitHub. Vale a pena experimentar pelo menos para execução instantânea de 51 e download automático conveniente das versões necessárias do Node.js.

Projetos relacionados