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:
# 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:
# 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:
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:
cd packages/api
bun dev
# en otra terminal
cd packages/frontend
bun devUsando --filter, puedes ejecutar el script dev en ambos paquetes a la vez:
bun --filter '*' devAmbos 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:
# Paquetes
# src/foo
# src/bar
# en src/bar: ejecuta myscript en src/foo, ¡no hay necesidad de cd!
bun run --filter foo myscriptOrden 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.