Skip to content

La bandera --filter (o -F) se usa para seleccionar paquetes por patrón en un monorepo. Los patrones pueden usarse para coincidir con nombres de paquetes o rutas de paquetes, con soporte completo para sintaxis glob.

Actualmente --filter es soportado por bun install y bun outdated, y también puede usarse para ejecutar scripts para múltiples paquetes a la vez.


Coincidencia ​

Nombre de paquete --filter <pattern> ​

Los patrones de nombre seleccionan paquetes basados en el nombre del paquete, como se especifica en package.json. Por ejemplo, si tienes paquetes pkg-a, pkg-b y other, puedes coincidir con todos los paquetes con *, solo pkg-a y pkg-b con pkg*, y un paquete específico proporcionando el nombre completo del paquete.

Ruta de paquete --filter ./<glob> ​

Los patrones de ruta se especifican comenzando el patrón con ./, y seleccionarán todos los paquetes en directorios que coincidan con el patrón. Por ejemplo, para coincidir con todos los paquetes en subdirectorios de packages, puedes usar --filter './packages/**'. Para coincidir con un paquete ubicado en packages/foo, usa --filter ./packages/foo.


bun install y bun outdated ​

Tanto bun install como bun outdated soportan la bandera --filter.

bun install por defecto instalará dependencias para todos los paquetes en el monorepo. Para instalar dependencias para paquetes específicos, usa --filter.

Dado un monorepo con espacios de trabajo pkg-a, pkg-b, y pkg-c bajo ./packages:

bash
# Instalar dependencias para todos los espacios de trabajo excepto `pkg-c`
bun install --filter '!pkg-c'

# Instalar dependencias para paquetes en `./packages` (`pkg-a`, `pkg-b`, `pkg-c`)
bun install --filter './packages/*'

# Igual que arriba, pero excluye el package.json raíz
bun install --filter '!./' --filter './packages/*'

De manera similar, bun outdated mostrará dependencias desactualizadas para todos los paquetes en el monorepo, y --filter puede usarse para restringir el comando a un subconjunto de los paquetes:

bash
# Mostrar dependencias desactualizadas para espacios de trabajo que comienzan con `pkg-`
bun outdated --filter 'pkg-*'

# Mostrar dependencias desactualizadas solo para el package.json raíz
bun outdated --filter './'

Para más información sobre ambos comandos, ver bun install y bun outdated.


Ejecutar scripts con --filter ​

Usa la bandera --filter para ejecutar scripts en múltiples paquetes a la vez:

bash
bun --filter <pattern> <script>

Digamos que tienes un monorepo con dos paquetes: packages/api y packages/frontend, ambos con un script dev que iniciará un servidor de desarrollo local. Normalmente, tendrías que abrir dos pestañas de terminal separadas, cd en cada directorio de paquete, y ejecutar bun dev:

bash
cd packages/api
bun dev

# en otra terminal
cd packages/frontend
bun dev

Usando --filter, puedes ejecutar el script dev en ambos paquetes a la vez:

bash
bun --filter '*' dev

Ambos comandos se ejecutarán en paralelo, y verás una interfaz de terminal agradable mostrando sus respectivas salidas:

Ejecutar scripts en espacios de trabajo ​

Los filtros respetan tu configuración de espacio de trabajo: Si tienes un archivo package.json que especifica qué paquetes son parte del espacio de trabajo, --filter se restringirá solo a estos paquetes. También, en un espacio de trabajo puedes usar --filter para ejecutar scripts en paquetes que están ubicados en cualquier lugar del espacio de trabajo:

bash
# Paquetes
# src/foo
# src/bar

# en src/bar: ejecuta myscript en src/foo, ¡no hay necesidad de cd!
bun run --filter foo myscript

Orden de dependencias ​

Bun respetará el orden de dependencias al ejecutar scripts. Digamos que tienes un paquete foo que depende de otro paquete bar en tu espacio de trabajo, y ambos paquetes tienen un script build. Cuando ejecutas bun --filter '*' build, notarás que foo solo comenzará a ejecutarse una vez que bar haya terminado.

Bun por www.bunjs.com.cn editar