O JavaScript é reconhecido mundialmente como uma das linguagens de programação mais populares e amplamente utilizadas. Essencial para o desenvolvimento de aplicativos web, para dispositivos móveis, softwares de desktop e até mesmo dispositivos embedded. Apesar de seu uso generalizado, não está isento de desafios. Como todas as tecnologias, o JavaScript enfrenta questões relacionadas ao desempenho, compatibilidade, segurança e complexidade.

Para resolver esses problemas, vários runtimes JavaScript foram desenvolvidos ao longo dos anos. O Node.js e o Deno se destacam, cada um trazendo soluções para lidar com as limitações do JavaScript. No entanto, embora tenham resolvido muitos problemas, eles também introduziram novos problemas, como a necessidade de pacotes desnecessários e um desempenho mais lento do runtime.

Agora, há o Bun, um runtime JavaScript que já existe há algum tempo, mas a equipe só lançou uma versão estável recentemente, em setembro de 2023. O Bun foi criado para ser uma alternativa direta e mais eficiente em comparação ao Node.js.

Este artigo explora o Bun, seus recursos distintos e como integrá-lo a seus projetos JavaScript.

O que é o Bun?

Página inicial do site Bun.sh.
Página inicial do site Bun.sh.

Bun é um runtime JavaScript escrito principalmente na linguagem de programação Zig. Seu objetivo é abordar as limitações do Node.js e, ao mesmo tempo, fornecer uma experiência de desenvolvimento mais simplificada e eficiente.

No entanto, o Bun não é apenas mais um Runtime JavaScript como muitos que surgiram ao longo dos anos: Ele é um conjunto de ferramentas completo projetado para revolucionar a forma como os desenvolvedores trabalham com JavaScript e TypeScript. Estendendo o JavaScriptCore, o mecanismo que alimenta o Safari da Apple, o Bun oferece tempos de inicialização mais rápidos e um uso mais eficiente da memória.

Ao contrário do Node.js, o Bun não depende do npm nem exige dependências externas para funcionar. Em vez disso, ele tem uma biblioteca padrão integrada, que oferece funcionalidades para diversos protocolos e módulos, incluindo variáveis de ambiente, HTTP, WebSocket, sistema de arquivos e muito mais.

Ele também fornece suporte imediato para TypeScript. Como o Bun converte internamente todos os arquivos fonte JavaScript ou TypeScript, você pode compilar e executar arquivos TypeScript diretamente, sem necessidade de configuração ou conversão adicional.

O Bun é fornecido com uma poderosa ferramenta de interface de linha de comando (CLI) que permite a você run, format, lint, test͏ e bundle seu código usando os seguintes comandos simples:

  • bun run – executa um arquivo JavaScript ou TypeScript com o Bun.
  • bun test – executa testes de unidade com a estrutura de teste integrada do Bun.
  • bun fmt – forma͏ta código com o formatador de código integrado do Bun.
  • bun lint – analisa o código com o analisador de código integrado do Bun.
  • bun bundle – agrupa o código com o agrupador de código integrado do Bun.

Outro recurso de destaque do Bun é o recurso de hot reloading, que atualiza as alterações de código em tempo real, preservando o estado do aplicativo. Essa é uma melhoria significativa em relação ao Node.js, em que uma funcionalidade semelhante requer pacotes externos, como o nodemon ou o sinalizador experimental --watch. Por outro lado, o Bun simplifica esse processo usando o recurso --hot flag.

Além das vantagens técnicas, o Bun conta com uma comunidade crescente de usuários que contribuem ativamente para o seu desenvolvimento e aprimoramento. Essa comunidade vibrante garante que o Bun permaneça atualizado e responsivo, oferecendo amplos recursos para aprendizado e solução de problemas.

Principais recursos do Bun

Além do hot reloading, do suporte nativo para TypeScript e dos tempos de inicialização mais rápidos, o Bun tem vários recursos principais que contribuem para sua popularidade e desempenho como um runtime JavaScript: seu bundler, executor de testes e gerenciador de pacotes. Vamos discutir esses recursos em detalhes.

Bundler

Um bundler consolida o código JavaScript e suas dependências em um único arquivo, otimizando sua eficiência de carregamento para navegadores ou em aplicativos Node.js. O Node.js não tem um bundler nativo, o que exige que os desenvolvedores confiem em bundlers de terceiros, como Rollup, Webpack e ͏Parcel, para lidar com o código JavaScript.

Em contrapartida, o Bun oferece um bundler integrado que requer configuração mínima e oferece suporte a diferentes formatos de módulo. Ele também tem otimizações integradas que permitem um agrupamento mais rápido. Comparativamente, o bundler do Bun supera os outros, executando 1,75x mais rápido que o ͏esbuild, 150x mais rápido que o Parcel, 180x mais rápido que o Rollup + Terser e ͏220x mais rápido que o Webpack.

Você pode empacotar seu projeto por meio do comando bun bundle ͏<source> --out-dir <directory>. Ele gera o arquivo de saída no diretório de saída especificado por você:

Agrupando um projeto com o Bun.
Agrupando um projeto com o Bun.

Executor de teste

O teste é uma parte integrante do desenvolvimento de software, garantindo a funcionalidade do código e identificando possíveis problemas antes da produção. O Bun também incorpora um executor de testes em seu kit de ferramentas.

Além disso, os desenvolvedores do Node.js empregaram estruturas de teste externas, como o Jest, que é eficiente e flexível, mas introduz dependências adicionais e sobrecarga de configuração no projeto.

Por outro lado, o Bun integra seu próprio executor de testes, enfatizando a velocidade e a compatibilidade. Essa abordagem integrada oferece várias vantagens:

  • Velocidade – Com o executor de testes integrado ao runtime, a execução dos testes ocorre diretamente, sem a sobrecarga de carregar estruturas de teste externas. O resultado é uma execução de testes mais rápida, o que é especialmente vantajoso em grandes bases de código ou ambientes de integração contínua.
  • Compatibilidade – O executor de testes integrado funciona perfeitamente com os outros recursos do Bun. Ele aproveita os tempos de inicialização rápidos do Bun e o uso eficiente da memória, garantindo que seus testes sejam executados em um ambiente que imita o ambiente de produção.
  • Simplicidade – Com o executor de testes integrado, você não precisa se preocupar em configurar e manter a compatibilidade entre o runtime e a estrutura de testes. Você pode escrever testes de forma semelhante ao código do aplicativo, usando os mesmos recursos de linguagem e APIs.

O executor de testes do Bun é totalmente compatível com várias estruturas de teste. A execução de testes é tão simples quanto a execução do comando bun test

Além disso, como o Bun oferece suporte nativo a TypeScript e JSX, você não precisa de configurações ou plugins adicionais. Você pode se concentrar em escrever testes de qualidade em vez de configurar o ambiente de teste

Gerenciador de pacotes

O gerenciador de pacotes do Bun, compatível com o Node.js, é significativamente mais rápido que o npm, o yarn e o pnpm. Ele aumenta a velocidade, reduz o uso do disco e diminui o consumo de memória.

Benchmark do Bun, pnpm, npm e Yarn pela equipe do Bun.
Benchmark do Bun, pnpm, npm e Yarn pela equipe do Bun.

Utilizando links simbólicos, o Bun conecta os pacotes de cada projeto a um local central, eliminando a necessidade de baixar novamente os módulos para projetos subsequentes. Embora a utilização de links simbólicos não seja uma novidade completa nos gerenciadores de pacotes, a implementação feita pelo Bun é superior às demais.

Como começar a usar o Bun

Para começar a usar o Bun em seu computador, primeiro instale o Bun. Há vários métodos para instalar o Bun, incluindo o uso de um comando cURL, npm ou Homebrew. No entanto, é fundamental observar que o Bun é usado de forma ideal em sistemas macOS ou Linux.

Para instalar o Bun por meio do comando cURL, execute o seguinte em seu terminal:

curl -fsSL https://bun.sh/install | bash

Após uma instalação bem-sucedida, verifique executando bun --version em seu terminal. Isso confirma que o Bun está pronto para ser usado.

Agora, você está pronto para explorar os recursos do Bun. Você pode usar o Bun para executar seus projetos Node.js com o comando bun run. Além disso, para executar um arquivo TypeScript chamado index.ts, use bun run index.ts – Bun converte seus arquivos TypeScript para outro formato de código, dispensando o uso de pacotes extras.

A utilidade do Bun vai além desses princípios básicos. Ele se integra perfeitamente a estruturas JavaScript, como React e Next.js. Para você se aprofundar e descobrir mais sobre as funcionalidades do Bun, consulte a documentação oficial.

Como executar projetos do Node.js com o Bun

Migrar ou executar seus projetos Node.js com Bun é simples, exigindo apenas alguns comandos Bun CLI. Siga estas etapas para executar seus projetos Node.js com Bun:

  1. Primeiro, instale o Bun. Depois que estiver instalado, navegue até o diretório que contém os arquivos de projeto do Node.js (incluindo o arquivo package.json ). No diretório de trabalho do seu projeto, execute este comando:
    bun install

    O comando acima permite que o Bun leia o arquivo package.json no diretório do seu projeto Node.js, revise o arquivo ͏lock .json (se houver) e instale as dependências listadas usando o gerenciador de pacotes integrado.

    Instalação de dependências com o Bun.
    Instalação de dependências com o Bun.

  2. Com as dependências instaladas, você pode executar o projeto com o Bun. Use o comando bun run, seguido pelo arquivo de ponto de entrada do seu projeto:
    bun run 

    Por exemplo, se o ponto de entrada do seu projeto for um arquivo chamado index.js, digite bun run index.͏js .

    O Bun executa o código JavaScript ou TypeScript no arquivo especificado. Se o seu projeto tiver um script inicial definido no arquivo package.json, você também poderá usar bun start para executar o projeto.

    Executando o projeto Bun no Visual Studio Code.
    Executando o projeto Bun no Visual Studio Code.

A transição para um novo ambiente de runtime pode apresentar desafios. No entanto, o suporte robusto do Bun para módulos do Node.js, o reconhecimento de variáveis globais e a adesão ao algoritmo de resolução de módulos do Node.js facilitam o processo de migração do Node.js para o Bun.

Suponha que você esteja trabalhando em um projeto Node.js que atualmente utiliza o pacote dotenv para gerenciar variáveis de ambiente. Nesse cenário, você pode remover com segurança o pacote dotenv juntamente com seu código de inicialização do seu projeto. Isso ocorre porque o Bun tem um recurso embutido para ler automaticamente seus arquivos .env, tornando o pacote dotenv desnecessário.

Lembre-se de que o Bun ainda está em desenvolvimento, portanto, é melhor você proceder com cautela durante o processo de migração.

Integre o Bun com a hospedagem de aplicativos da Kinsta

Hospedar um aplicativo Bun na Kinsta é um processo fluido com a Hospedagem de Aplicativos da Kinsta, utilizando o Nixpacks para construir seu projeto.

O Nixpacks, semelhante ao Buildpacks, é um projeto de código aberto projetado para criar imagens de contêineres para aplicativos com base em seu repositório. Aproveitando o binário Nix, essa ferramenta cria aplicativos, instala dependências e configura ambientes após a implantação.

Sua arquitetura baseada em Rust garante tempos de construção mais rápidos. Notavelmente, o Nixpacks se sobressai em relação aos Buildpacks ao incorporar um sistema de cache integrado, acelerando significativamente as construções subsequentes após a inicial.

A adoção do Nixpacks pela Kinsta ressalta seu compromisso com a tecnologia de ponta, oferecendo soluções mais eficientes e flexíveis para gerenciar imagens de contêineres e simplificar o processo de desenvolvimento.

Para implantar seu projeto Bun na Hospedagem de Aplicativos da Kinsta, primeiro envie seu código ao seu provedor Git preferido (Bitbucket, GitHub ou GitLab). Quando seu repositório estiver pronto, siga estas etapas para implantar com a Kinsta:

  1. Faça login ou crie uma conta para visualizar seu painel MyKinsta.
  2. Autorize a Kinsta com seu provedor Git.
  3. Clique em Aplicativos na barra lateral esquerda e, em seguida, clique em Adicionar aplicativo.
  4. Selecione o repositório e a branch a partir da qual você deseja implantar.
  5. Atribua um nome exclusivo ao seu aplicativo e escolha um local de centro de dados.
  6. Em seguida, configure seu ambiente de build. Selecione a configuração da build machine padrão com a opção Nixpacks recomendada.
  7. Use todas as configurações padrão e, em seguida, clique em Criar aplicativo.

A implantação normalmente leva alguns minutos e, se for bem-sucedida, você receberá um link para o aplicativo junto com um painel que contém informações sobre a implantação.

A Kinsta fornece uma infraestrutura robusta e confiável para seus aplicativos. A implantação do seu aplicativo Bun diretamente na plataforma da Kinsta é fácil com sua interface amigável – não é necessária nenhuma integração específica. Basta carregar o código, definir as configurações e o aplicativo estará pronto para ser lançado.

Resumo

Como um runtime JavaScript, o Bun ganhou importância por várias razões. Projetado com foco em desempenho e simplicidade, visa acelerar o processo de desenvolvimento e melhorar a eficiência geral. Sua arquitetura modular permite escolher apenas os componentes necessários para projetos específicos, reduzindo o excesso desnecessário.

Diferente do Node.js, Bun tem uma pegada mais leve e tempos de inicialização mais rápidos. Esse recurso é crucial para aplicativos que exigem tempos de resposta rápidos e uso eficiente de recursos. A simplicidade e a abordagem modular do Bun contribuem para uma experiência de desenvolvimento mais direta e personalizável.

Ao hospedar seus aplicativos Bun com o serviço de Hospedagem de Aplicativos da Kinsta, você obtém uma solução perfeita e poderosa. A infraestrutura robusta da Kinsta garante alto desempenho, com recursos como dimensionamento automático e entrega de conteúdo de carregamento rápido.

Escolher a Kinsta significa que hospedar seus aplicativos Bun se torna uma experiência confiável e eficiente, dando a você a liberdade de se concentrar na construção e otimização de seus projetos.

Qual é a sua opinião sobre Bun? Você acha que deveria migrar todos os seus aplicativos Node.js para usar Bun? Compartilhe seus pensamentos conosco na seção de comentários.

Joel Olawanle Kinsta

Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 200 technical articles majorly around JavaScript and it's frameworks.