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 installinstala uma pastanode_modulescompatível com Node.js. Você pode usá-lo no lugar denpm installpara projetos Node.js sem nenhuma alteração de código e sem usar o runtime do Bun. - Converte automaticamente
package-lock.jsonpara o formato de lockfilebun.lockdo Bun, preservando suas versões de dependências resolvidas existentes sem nenhum trabalho manual da sua parte. Você pode usar secretamentebun installno lugar denpm installno trabalho sem que ninguém perceba. - Compatível com
.npmrc: bun install lê a configuração de registro npm do.npmrcdo npm, então você pode usar a mesma configuração para npm e Bun. - Hardlinks: No Windows e Linux,
bun installusa hardlinks para economizar espaço em disco e tempos de instalação.
# 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/bunExecute 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.
| NPM | Bun |
|---|---|
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
# 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.tsWorkspaces? 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.
{
"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.
bun --filter 'lib-*' my-script
# em vez de:
# npm run --workspace lib-foo --workspace lib-bar my-scriptAtualizar 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.
# 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 --latestVisualizar dependências desatualizadas
Para visualizar dependências desatualizadas, execute bun outdated. Isso é como npm outdated mas com saída mais compacta.
bun outdated┌────────────────────────────────────────┬─────────┬────────┬────────┐
│ 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.
# Lista pacotes instalados de nível superior:
bun pm lsmy-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
...# Lista todos os pacotes instalados:
bun pm ls -amy-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.
# Cria um tarball
bun pm packTotal files: 46
Shasum: 2ee19b6f0c6b001358449ca0eadead703f326216
Integrity: sha512-ZV0lzWTEkGAMz[...]Gl4f8lA9sl97g==
Unpacked size: 0.41MB
Packed size: 117.50KBShebang
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.
# Força usar o runtime do Bun em vez do node
bun --bun my-script
# Isso também funciona:
bun run --bun my-scriptInstalaçõ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.
# Instala um pacote globalmente
bun i -g eslint
# Executa um pacote instalado globalmente sem o prefixo `bun run`
eslint --init