Флаг --filter (или -F) используется для выбора пакетов по шаблону в монорепозитории. Шаблоны могут использоваться для сопоставления имен пакетов или путей пакетов с полной поддержкой синтаксиса glob.
В настоящее время --filter поддерживается командами bun install и bun outdated, а также может использоваться для одновременного запуска скриптов в нескольких пакетах.
Сопоставление
Имя пакета --filter <pattern>
Шаблоны имен выбирают пакеты на основе имени пакета, указанного в package.json. Например, если у вас есть пакеты pkg-a, pkg-b и other, вы можете сопоставить все пакеты с *, только pkg-a и pkg-b с pkg*, и конкретный пакет, указав полное имя пакета.
Путь пакета --filter ./<glob>
Шаблоны путей указываются путем начала шаблона с ./ и выбирают все пакеты в каталогах, соответствующих шаблону. Например, чтобы сопоставить все пакеты в подкаталогах packages, можно использовать --filter './packages/**'. Чтобы сопоставить пакет, расположенный в packages/foo, используйте --filter ./packages/foo.
bun install и bun outdated
Обе команды bun install и bun outdated поддерживают флаг --filter.
bun install по умолчанию устанавливает зависимости для всех пакетов в монорепозитории. Для установки зависимостей для конкретных пакетов используйте --filter.
Для монорепозитория с рабочими областями pkg-a, pkg-b и pkg-c в ./packages:
# Установить зависимости для всех рабочих областей, кроме pkg-c
bun install --filter '!pkg-c'
# Установить зависимости для пакетов в ./packages (pkg-a, pkg-b, pkg-c)
bun install --filter './packages/*'
# То же самое, но исключить корневой package.json
bun install --filter '!./' --filter './packages/*'Аналогично, bun outdated отображает устаревшие зависимости для всех пакетов в монорепозитории, и --filter может использоваться для ограничения команды подмножеством пакетов:
# Отобразить устаревшие зависимости для рабочих областей, начинающихся с pkg-
bun outdated --filter 'pkg-*'
# Отобразить устаревшие зависимости только для корневого package.json
bun outdated --filter './'Дополнительную информацию об этих командах см. в bun install и bun outdated.
Запуск скриптов с --filter
Используйте флаг --filter для выполнения скриптов в нескольких пакетах одновременно:
bun --filter <pattern> <script>Предположим, у вас есть монорепозиторий с двумя пакетами: packages/api и packages/frontend, оба со скриптом dev, который запускает локальный сервер разработки. Обычно вам пришлось бы открыть две отдельные вкладки терминала, перейти в каталог каждого пакета и выполнить bun dev:
cd packages/api
bun dev
# в другом терминале
cd packages/frontend
bun devИспользуя --filter, вы можете запустить скрипт dev в обоих пакетах одновременно:
bun --filter '*' devОбе команды будут выполняться параллельно, и вы увидите удобный интерфейс терминала, показывающий их соответствующие выходные данные:
Запуск скриптов в рабочих областях
Фильтры уважают вашу конфигурацию рабочей области: Если у вас есть файл package.json, который указывает, какие пакеты являются частью рабочей области, --filter будет ограничен только этими пакетами. Также в рабочей области вы можете использовать --filter для запуска скриптов в пакетах, расположенных в любом месте рабочей области:
# Пакеты
# src/foo
# src/bar
# в src/bar: запускает myscript в src/foo, не нужно cd!
bun run --filter foo myscriptПорядок зависимостей
Bun уважает порядок зависимостей при запуске скриптов. Предположим, у вас есть пакет foo, который зависит от другого пакета bar в вашей рабочей области, и оба пакета имеют скрипт build. При запуске bun --filter '*' build вы заметите, что foo начнет выполняться только после завершения bar.