Skip to content

bun install é um cliente npm compatível com Node.js projetado para ser um sucessor incrivelmente rápido do npm.

Colocamos muito trabalho para garantir que o caminho de migração de npm install para bun install seja tão fácil quanto executar bun install em vez de npm install.

  • Projetado para Node.js e Bun: bun install instala uma pasta node_modules compatível com Node.js. Você pode usá-lo no lugar de npm install para projetos Node.js sem nenhuma alteração de código e sem usar o runtime do Bun.
  • Converte automaticamente package-lock.json para o formato de lockfile bun.lock do Bun, preservando suas versões de dependências resolvidas existentes sem nenhum trabalho manual da sua parte. Você pode usar secretamente bun install no lugar de npm install no trabalho sem que ninguém perceba.
  • Compatível com .npmrc: bun install lê a configuração de registro npm do .npmrc do npm, então você pode usar a mesma configuração para npm e Bun.
  • Hardlinks: No Windows e Linux, bun install usa hardlinks para economizar espaço em disco e tempos de instalação.
bash
# Leva apenas um comando para migrar
bun i

# Para adicionar dependências:
bun i @types/bun

# Para adicionar devDependencies:
bun i -d @types/bun

# Para remover uma dependência:
bun rm @types/bun

Execute scripts do package.json mais rápido

Execute scripts do package.json, executáveis de node_modules/.bin (tipo de como npx) e arquivos JavaScript/TypeScript (assim como node) - tudo a partir de um único comando simples.

NPMBun
npm run <script>bun <script>
npm exec <bin>bun <bin>
node <file>bun <file>
npx <package>bunx <package>

Quando você usa bun run <executable>, ele escolherá o executável instalado localmente

sh
# Executa um script do package.json:
bun my-script
bun run my-script

# Executa um executável em node_modules/.bin:
bun my-executable # como tsc, esbuild, etc.
bun run my-executable

# Executa um arquivo JavaScript/TypeScript:
bun ./index.ts

Workspaces? Sim.

bun install suporta workspaces de forma semelhante ao npm, com mais recursos.

No package.json, você pode definir "workspaces" como um array de caminhos relativos.

json
{
  "name": "my-app",
  "workspaces": ["packages/*", "apps/*"]
}

Filtrar scripts por nome do workspace

No Bun, a flag --filter aceita um padrão glob e executará o comando simultaneamente para todos os pacotes de workspace com um name que corresponde ao padrão, respeitando a ordem de dependência.

sh
bun --filter 'lib-*' my-script
# em vez de:
# npm run --workspace lib-foo --workspace lib-bar my-script

Atualizar dependências

Para atualizar uma dependência, você pode usar bun update <package>. Isso atualizará a dependência para a versão mais recente que satisfaz o intervalo semver especificado no package.json.

sh
# Atualiza uma única dependência
bun update @types/bun

# Atualiza todas as dependências
bun update

# Ignora semver, atualiza para a versão mais recente
bun update @types/bun --latest

# Atualiza uma dependência para uma versão específica
bun update @types/bun@1.3.3

# Atualiza todas as dependências para as versões mais recentes
bun update --latest

Visualizar dependências desatualizadas

Para visualizar dependências desatualizadas, execute bun outdated. Isso é como npm outdated mas com saída mais compacta.

sh
bun outdated
txt
┌────────────────────────────────────────┬─────────┬────────┬────────┐
│ Package                                │ Current │ Update │ Latest │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @types/bun (dev)                       │ 1.1.6   │ 1.1.10 │ 1.1.10 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @types/react (dev)                     │ 18.3.3  │ 18.3.8 │ 18.3.8 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @typescript-eslint/eslint-plugin (dev) │ 7.16.1  │ 7.18.0 │ 8.6.0  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @typescript-eslint/parser (dev)        │ 7.16.1  │ 7.18.0 │ 8.6.0  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @vscode/debugadapter (dev)             │ 1.66.0  │ 1.67.0 │ 1.67.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ esbuild (dev)                          │ 0.21.5  │ 0.21.5 │ 0.24.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ eslint (dev)                           │ 9.7.0   │ 9.11.0 │ 9.11.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ mitata (dev)                           │ 0.1.11  │ 0.1.14 │ 1.0.2  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ prettier-plugin-organize-imports (dev) │ 4.0.0   │ 4.1.0  │ 4.1.0  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ source-map-js (dev)                    │ 1.2.0   │ 1.2.1  │ 1.2.1  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ typescript (dev)                       │ 5.5.3   │ 5.6.2  │ 5.6.2  │
└────────────────────────────────────────┴─────────┴────────┴────────┘

Listar pacotes instalados

Para listar pacotes instalados, você pode usar bun pm ls. Isso listará todos os pacotes instalados na pasta node_modules usando o lockfile do Bun como fonte da verdade. Você pode passar a flag -a para listar todos os pacotes instalados, incluindo dependências transitivas.

sh
# Lista pacotes instalados de nível superior:
bun pm ls
txt
my-pkg node_modules (781)
├── @types/node@20.16.5
├── @types/react@18.3.8
├── @types/react-dom@18.3.0
├── eslint@8.57.1
├── eslint-config-next@14.2.8
...
sh
# Lista todos os pacotes instalados:
bun pm ls -a
txt
my-pkg node_modules
├── @alloc/quick-lru@5.2.0
├── @isaacs/cliui@8.0.2
│   └── strip-ansi@7.1.0
│       └── ansi-regex@6.1.0
├── @jridgewell/gen-mapping@0.3.5
├── @jridgewell/resolve-uri@3.1.2
...

Criar um tarball de pacote

Para criar um tarball de pacote, você pode usar bun pm pack. Isso criará um tarball do pacote no diretório atual.

sh
# Cria um tarball
bun pm pack
txt
Total files: 46
Shasum: 2ee19b6f0c6b001358449ca0eadead703f326216
Integrity: sha512-ZV0lzWTEkGAMz[...]Gl4f8lA9sl97g==
Unpacked size: 0.41MB
Packed size: 117.50KB

Shebang

Se o pacote referencia node no shebang #!/usr/bin/env node, bun run por padrão respeitará isso e usará o node do sistema. Você pode forçá-lo a usar o node do Bun passando --bun para bun run.

Quando você passa --bun para bun run, criamos um symlink para o executável Bun instalado localmente nomeado "node" em um diretório temporário e adicionamos isso ao seu PATH durante a execução do script.

sh
# Força usar o runtime do Bun em vez do node
bun --bun my-script

# Isso também funciona:
bun run --bun my-script

Instalações globais

Você pode instalar pacotes globalmente usando bun i -g <package>. Isso instalará em uma pasta .bun/install/global/node_modules dentro do seu diretório home por padrão.

sh
# Instala um pacote globalmente
bun i -g eslint

# Executa um pacote instalado globalmente sem o prefixo `bun run`
eslint --init

Bun by www.bunjs.com.cn edit