A biblioteca padrão de JavaScript que nunca tivemos
O ecossistema JavaScript há muito tempo lida com a ausência de uma biblioteca padrão abrangente. Esse vazio forçou os desenvolvedores a integrar inúmeros micro-pacotes, contribuindo para um inchaço significativo de dependências nos projetos e aumentando a exposição a vulnerabilidades na cadeia de suprimentos. Essa dependência de soluções fragmentadas de terceiros tornou-se um desafio arquitetural persistente.
Bun 1.4, apresentado como The Rust Rewrite, confronta diretamente esse problema. O runtime agora agrupa utilitários essenciais de alto desempenho, projetados em Rust, para fornecer funcionalidades principais que anteriormente exigiam pacotes externos. Isso elimina a necessidade de mais de 15 dependências comuns em vários tipos de projetos.
Exemplos específicos de substituição de dependências incluem:
- Bun.WebView substituindo Playwright e Puppeteer para controle de navegador headless.
- Bun.Image lidando com manipulação de imagens, eliminando a necessidade de bibliotecas como Sharp.
- Bun.Markdown integrando análise robusta de markdown.
- Bun.Terminal oferecendo um pseudo-terminal integrado, removendo a dependência do node-pty.
Essa abordagem integrada sinaliza uma grande mudança filosófica para o ecossistema JavaScript. Ela se afasta de uma cultura de micro-pacotes fragmentados em direção a um runtime mais robusto e 'completo'. O Bun 1.4 visa consolidar capacidades fundamentais, promovendo maior estabilidade e reduzindo a sobrecarga dos projetos.
Elimine Puppeteer e Sharp com APIs nativas
O Bun 1.4 introduz o Bun.WebView, um navegador headless integrado para automação, projetado para substituir dependências como Playwright e Puppeteer. No Mac, o Bun.WebView utiliza o WebKit do sistema, o motor que alimenta o Safari, não exigindo instalações adicionais. Para usuários de Windows e Linux, ele aproveita uma instância existente do Chrome ou Chromium, capaz de executar um sub-processo headless ou conectar-se a um navegador já aberto.
Essa integração nativa despacha eventos de navegador nativos para interações, fazendo com que cliques, digitação e rolagem pareçam mais humanos para as páginas da web. Sua API cobre operações fundamentais como encontrar elementos, clicar, digitar e executar JavaScript específico da página via evaluate. Embora eficaz para automação de navegador leve e scraping, o Bun.WebView ainda não substitui totalmente ferramentas como o Playwright, carecendo de recursos como um executor de testes ou visualizador de rastreamento.
Reduzindo ainda mais o inchaço de dependências, o Bun.Image serve como um substituto poderoso para o Sharp. Esta biblioteca de imagem nativa oferece operações encadeáveis diretamente dentro do Bun. Os desenvolvedores podem redimensionar, girar, inverter, ajustar brilho e nitidez, e converter formatos de imagem de forma eficiente. O Bun.Image também lê metadados, incluindo largura, altura e formato, sem exigir a decodificação completa dos dados de pixel. Isso elimina a necessidade de compilações nativas complexas e resolve problemas de implantação frequentemente encontrados com bibliotecas externas de processamento de imagem.
Seu fluxo de trabalho de desenvolvimento, agora integrado
O Bun 1.4 introduz um executor de scripts integrado, eliminando dependências externas como concurrently ou npm-run-all. Os desenvolvedores agora podem executar vários scripts do package.json simultaneamente usando --parallel ou sequencialmente com --sequential. Esse recurso inclui saída prefixada pelo nome do script, correspondência de glob para nomes de scripts e filtragem de workspace. Uma opção também permite que outros scripts continuem mesmo se um deles apresentar erro.
Para agendamento de tarefas, o Bun.cron substitui pacotes como o node-cron. Ele suporta dois modos: uma função executada no event loop para tarefas simples, enquanto um script registra um cron job nativo em nível de sistema operacional. Esses jobs de nível de sistema utilizam o crontab no Linux, launchd no Mac e o Agendador de Tarefas no Windows para uma execução robusta e persistente. A sintaxe cron padrão, incluindo dias nomeados e auxiliares como daily, é suportada.
Uma API de pseudo-terminal, Bun.Terminal, integra-se diretamente ao runtime, eliminando a necessidade do node-pty. Isso permite que o JavaScript controle aplicações de linha de comando interativas como Bash, Vim ou Htop. O Bun.spawn ganha uma opção terminal, garantindo que sub-processos recebam um ambiente de terminal genuíno para saída colorida, movimentação de cursor e prompts interativos. Para mais detalhes sobre esses e outros recursos, consulte as notas de lançamento do Bun 1.4.
Gostando do artigo? Receba um assim na sua caixa de entrada toda manhã.
um e-mail por dia · cancele em dois cliques · sem rastreadores de terceiros
O Verdadeiro Dividendo da Reescrita em Rust
A Reescrita em Rust fundamental do Bun 1.4 entrega ganhos substanciais de desempenho, o verdadeiro dividendo da rearquitetura. Essa reengenharia resulta em tempos de inicialização mais rápidos e uso de CPU mensuravelmente menor para todas as operações. Notavelmente, o binário do Bun é 17% menor, mesmo com a adição de novas funcionalidades extensas como Bun.WebView e Bun.Image.
Utilitários adicionais simplificam ainda mais os fluxos de trabalho de desenvolvimento. O Bun.Archive fornece uma implementação nativa e rápida para inspecionar tarballs, permitindo que desenvolvedores leiam arquivos específicos, como um package.json de um arquivo .tgz, sem a extração completa. O Bun também introduz suporte nativo para analisar e converter (stringify) JSON5 e XML, eliminando a necessidade de bibliotecas de terceiros para esses formatos de dados comuns.
Uma melhoria significativa na qualidade de vida para o gerenciamento de pacotes é o novo armazenamento virtual global, isolatedLinker. Este recurso economiza um espaço considerável em disco ao criar links simbólicos (symlinks) de pacotes instalados nas pastas node_modules de projetos individuais, em vez de duplicá-los. O isolatedLinker também acelera comandos bun install subsequentes em vários projetos, aumentando a eficiência geral do desenvolvedor.
Perguntas Frequentes
Qual é a maior mudança no Bun 1.4?
A 'Reescrita em Rust' introduz uma poderosa biblioteca padrão integrada, visando substituir mais de 15 dependências comuns do NPM para tarefas como automação de navegador, processamento de imagem e cron jobs, diretamente dentro do runtime.
O Bun 1.4 substitui totalmente o Playwright ou Puppeteer?
Não completamente. O Bun.WebView é excelente para automação de navegador leve, scraping e scripts de interface. No entanto, atualmente carece de recursos avançados encontrados no Playwright, como um executor de testes dedicado e visualizador de rastreamento (trace viewer).
Quais são algumas dependências importantes que o Bun 1.4 pode substituir?
O Bun 1.4 pode substituir pacotes como Playwright/Puppeteer (Bun.WebView), Sharp (Bun.Image), Marked (Bun.Markdown), node-cron (Bun.cron), concurrently (scripts paralelos) e várias bibliotecas de tar e strings ANSI.
Como funciona o armazenamento virtual global do Bun 1.4?
Quando o 'isolatedLinker' está ativado, o bun install extrai pacotes para um único armazenamento global na sua máquina. Em seguida, ele usa links simbólicos para conectá-los ao node_modules do seu projeto, economizando espaço em disco significativo e acelerando instalações em vários projetos.

