[ Discussão ] Quanto tempo levará para Bun se tornar o novo padrão?
Introdução:
Bun foi lançado ainda em 2022. Com uma promessa de substituir o Node.js. Temos até o Deno que foi desenvolvido pela o mesmo idealizador do Node.js.
Bun já se provou ser bem eficiente no que faz, com algumas API internas muito rápidas, fácil de utiliza e reaproveitando ferramentas da web que são uma mão na roda no backend também, como o URLSearchParams.
Porém, ainda não vi nenhuma vaga requisitando Bun, apesar da equipe mostrar comprometimento com o projeto e estar melhorando a cada dia.
As empresas preferem ferramentas amplamente adotadas?
Ferramentas que são amplamente adotas são testadas, usadas em diversos contextos, e etc... Ou seja, passa mais credibilidade.
Tecnicamente faz sentido. Por que criar um projeto usando uma ferramenta que não sabemos se é confiável? Pois é, aparentemente a maioria segue este caminho.
Bun e sua proposta:
Bun quer ser um substituto do Node.js. Eu uso Bun para todos os meus projetos backend atualmente. E irei expor minha experiência com a ferramenta até hoje.
Integração total com TypeScript
Bun é integrado totalmente com TypeScript, que é obrigatório para qualquer projeto robusto feito com JavaScript.
Com um simples comando você já inicia um projeto totalmente configurado. Bun ainda conta com alguns templates para React ou outras estruturas.
Sim, Bun permite criar aplicações SSR usando React ou simplesmente HTML e CSS. Apesar de não ter testado ainda.
Suporte total a ESM
Apesar de eu não levar isso como algo a se exaltar, pois é o mínimo que eu espero atualmente. Mas infelizmente não é o que vejo por com algumas ferramentas, como o Node.js, que possui formas de utilizar ESM, mas não é totalmente suportado.
Ainda temos que fazer uns hacks para obter o
dirnameusando ESM no Node.js
Muito rápido:
Bun possui uma forma nativa de instalar packages. Apesar de você ver o node_modules ali, é apenas por questões de compatibilidades, como descrito na documentação. O Bun possui formas otimizadas de lidar com o node_modules.
Eu não vi nada oficial sobre, mas o
node_modulespode simplesmente ser removido uma vez que a compatibilidade não for mais necessária.
Além disso Bun conta com diversas modulos internos muito úteis. Alguns deles são para a escrita e leitura de arquivos usando o Bun.file. Que possui uma velocidade incrível.
Suporte nativo a SQlite:
Eu realmente não sei se isso existe no Node de forma nativa. Aparentemente é necessário é necessário instalar um SDK para isso.
No Bun, isso já vêm por padrão, isso significa que você não precisa instalar nada. É muito fácil de utilizar SQLite no Bun.
Suporte a SQL
Você também pode usar PostgreSQL sem baixar nada, apenas usando Bun, e isto é incrivelmente fácil de configurar. Segue um exemplo de uso que eu mesmo implementei esses dias.
import 'dotenv/config';
import { SQL } from "bun";
export const db = new SQL({
hostname: process.env.PGHOST,
port: process.env.PGPORT,
database: process.env.PGDATABASE,
username: process.env.PGUSERNAME,
password: process.env.PGPASSWORD,
connectionTimeout: 30,
idleTimeout: 30,
maxLifetime: 0,
max: 20,
onclose: client => {
console.log("Connection closed");
},
});
Agora para criar as tabelas:
import { db } from "./config.database";
import { sql } from "bun";
await db.connect()
await sql`
CREATE TABLE IF NOT EXISTS test (
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
test VARCHAR(2048) NOT NULL UNIQUE,
test_test VARCHAR(20) NOT NULL UNIQUE,
testing INTEGER NOT NULL DEFAULT 0
)
`;
Sem necessidades de baixar nada. No máximo o dotenv para esconder suas credenciais do banco de dados.
Testes:
Apesar de estar em estágios iniciais. Bun prover uma forma de testar seu código ao estilo jest, o que é realmente interessante, pois jest tem envelhecido, tem alguns problemas e de longe já não é o mais ideal para projetos modernos. Apesar de ser robusto no que faz e ser amplamente adotado por ferramentas como Nest.js.
Talvez seja essa dependência que faz o
jestser tão usado.
O testes do Bun cobre uma série de features básicas e algumas um tanto mais avançadas. Eu não explorei 100% ainda, mas até o momento nunca me decepcionou e realmente é praticamente um jest mais rápido e fácil de mexer. Não precisa configurar nada de TypeScript ou lidar com outras ferramentas como Webpack.
Conclusão:
Apesar do Bun ser bem superior ao Node.js em diversas coisas, Node.js é mais maduro. Se ao menos fosse mais adotado por empresas, poderia rapidamente se tornar um novo padrão, mais maduro, o que seria interessante, por um padrão num ecossistema fragmentado, onde todo dia projetos estão com problemas de dependencies.
É uma ferramenta que vejo futuro. E até um raio de esperança. Projetos usando JavaScript tem se tornado um saco por ter que lidar com milhares de dependências que forão decriptadas. Muita das vezes para fazer algo simples (que nem precisava de packages para isso).
Vale lembrar que expus apenas algumas coisas, Bun é muito maior que isso. Ficaria o dia todo aqui falando sobre. Então vale testar!
É muito comum criar um projeto usando ESM, e alguma biblioteca suportar apenas CommonJS, o que faz necessário usar um "hack". Isso abre espaço para código frágil, difícil de testar e lidar.