Runtime Bun
Bun é um runtime e toolkit JavaScript rápido e all-in-one: runtime, gerenciador de pacotes, bundler e executor de testes.
Quando Usar
- Prefira Bun para: novos projetos JS/TS, scripts onde a velocidade de instalação/execução importa, deploys no Vercel com runtime Bun e quando você deseja uma única toolchain (executar + instalar + testar + construir).
- Prefira Node para: máxima compatibilidade com o ecossistema, ferramentas legadas que presumem Node ou quando uma dependência tem problemas conhecidos com Bun.
Use ao: adotar Bun, migrar do Node, escrever ou debugar scripts/testes Bun ou configurar Bun no Vercel ou em outras plataformas.
Como Funciona
- Runtime: Runtime compatível com Node (construído sobre JavaScriptCore, implementado em Zig).
- Gerenciador de pacotes:
bun installé significativamente mais rápido que npm/yarn. O lockfile ébun.lock(texto) por padrão no Bun atual; versões antigas usavambun.lockb(binário). - Bundler: Bundler e transpilador integrados para aplicações e bibliotecas.
- Executor de testes:
bun testintegrado com API semelhante ao Jest.
Migração do Node: Substitua node script.js por bun run script.js ou bun script.js. Execute bun install no lugar de npm install; a maioria dos pacotes funciona. Use bun run para scripts npm; bun x para execuções avulsas estilo npx. Os módulos internos do Node são suportados; prefira as APIs do Bun onde existirem para melhor desempenho.
Vercel: Defina o runtime como Bun nas configurações do projeto. Build: bun run build ou bun build ./src/index.ts --outdir=dist. Instalação: bun install --frozen-lockfile para deploys reproduzíveis.
Exemplos
Executar e instalar
# Instalar dependências (cria/atualiza bun.lock ou bun.lockb)
bun install
# Executar um script ou arquivo
bun run dev
bun run src/index.ts
bun src/index.ts
Scripts e env
bun run --env-file=.env dev
FOO=bar bun run script.ts
Testes
bun test
bun test --watch
// test/example.test.ts
import { expect, test } from "bun:test";
test("add", () => {
expect(1 + 2).toBe(3);
});
API do Runtime
const file = Bun.file("package.json");
const json = await file.json();
Bun.serve({
port: 3000,
fetch(req) {
return new Response("Olá");
},
});
Melhores Práticas
- Faça commit do lockfile (
bun.lockoubun.lockb) para instalações reproduzíveis. - Prefira
bun runpara scripts. Para TypeScript, o Bun executa.tsnativamente. - Mantenha as dependências atualizadas; o Bun e o ecossistema evoluem rapidamente.