Skip to content

bun install es un cliente npm compatible con Node.js diseñado para ser un sucesor increíblemente rápido de npm.

Hemos puesto mucho trabajo en asegurar que el camino de migración de npm install a bun install sea tan fácil como ejecutar bun install en lugar de npm install.

  • Diseñado para Node.js y Bun: bun install instala una carpeta node_modules compatible con Node.js. Puedes usarlo en lugar de npm install para proyectos de Node.js sin ningún cambio de código y sin usar el runtime de Bun.
  • Convierte automáticamente package-lock.json al formato de archivo de bloqueo bun.lock de bun, preservando tus versiones de dependencias resueltas existentes sin ningún trabajo manual de tu parte. Puedes usar secretamente bun install en lugar de npm install en el trabajo sin que nadie lo note.
  • Compatible con .npmrc: bun install lee la configuración del registro npm desde .npmrc de npm, así que puedes usar la misma configuración tanto para npm como para Bun.
  • Enlaces duros: En Windows y Linux, bun install usa enlaces duros para ahorrar espacio en disco y tiempos de instalación.
bash
# Solo se necesita un comando para migrar
bun i

# Para agregar dependencias:
bun i @types/bun

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

# Para eliminar una dependencia:
bun rm @types/bun

Ejecutar scripts de package.json más rápido

Ejecuta scripts desde package.json, ejecutables desde node_modules/.bin (algo así como npx), y archivos JavaScript/TypeScript (igual que node) - todo desde un solo comando simple.

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

Cuando usas bun run <executable>, elegirá el ejecutable instalado localmente

sh
# Ejecuta un script de package.json:
bun my-script
bun run my-script

# Ejecuta un ejecutable en node_modules/.bin:
bun my-executable # como tsc, esbuild, etc.
bun run my-executable

# Ejecuta un archivo JavaScript/TypeScript:
bun ./index.ts

¿Workspaces? Sí.

bun install soporta workspaces de manera similar a npm, con más características.

En package.json, puedes establecer "workspaces" a un array de rutas relativas.

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

Filtrar scripts por nombre de workspace

En Bun, el flag --filter acepta un patrón glob, y ejecutará el comando concurrentemente para todos los paquetes de workspace con un name que coincida con el patrón, respetando el orden de dependencias.

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

Actualizar dependencias

Para actualizar una dependencia, puedes usar bun update <package>. Esto actualizará la dependencia a la última versión que satisfaga el rango semver especificado en package.json.

sh
# Actualizar una sola dependencia
bun update @types/bun

# Actualizar todas las dependencias
bun update

# Ignorar semver, actualizar a la última versión
bun update @types/bun --latest

# Actualizar una dependencia a una versión específica
bun update @types/bun@1.3.3

# Actualizar todas las dependencias a las últimas versiones
bun update --latest

Ver dependencias desactualizadas

Para ver dependencias desactualizadas, ejecuta bun outdated. Esto es como npm outdated pero con una salida más 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 paquetes instalados

Para listar paquetes instalados, puedes usar bun pm ls. Esto listará todos los paquetes que están instalados en la carpeta node_modules usando el archivo de bloqueo de Bun como fuente de verdad. Puedes pasar el flag -a para listar todos los paquetes instalados, incluyendo dependencias transitivas.

sh
# Listar paquetes instalados de primer nivel:
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
# Listar todos los paquetes 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
...

Crear un tarball de paquete

Para crear un tarball de paquete, puedes usar bun pm pack. Esto creará un tarball del paquete en el directorio actual.

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

Shebang

Si el paquete referencia node en el shebang #!/usr/bin/env node, bun run respetará por defecto y usará el node del sistema. Puedes forzarlo a usar el node de Bun pasando --bun a bun run.

Cuando pasas --bun a bun run, creamos un enlace simbólico al ejecutable de Bun instalado localmente llamado "node" en un directorio temporal y lo agregamos a tu PATH durante la ejecución del script.

sh
# Forzar el uso del runtime de Bun en lugar de node
bun --bun my-script

# Esto también funciona:
bun run --bun my-script

Instalaciones globales

Puedes instalar paquetes globalmente usando bun i -g <package>. Esto se instalará en una carpeta .bun/install/global/node_modules dentro de tu directorio home por defecto.

sh
# Instalar un paquete globalmente
bun i -g eslint

# Ejecutar un paquete instalado globalmente sin el prefijo `bun run`
eslint --init

Bun por www.bunjs.com.cn editar