Skip to content

Флаг --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:

bash
# Установить зависимости для всех рабочих областей, кроме 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 может использоваться для ограничения команды подмножеством пакетов:

bash
# Отобразить устаревшие зависимости для рабочих областей, начинающихся с pkg-
bun outdated --filter 'pkg-*'

# Отобразить устаревшие зависимости только для корневого package.json
bun outdated --filter './'

Дополнительную информацию об этих командах см. в bun install и bun outdated.


Запуск скриптов с --filter

Используйте флаг --filter для выполнения скриптов в нескольких пакетах одновременно:

bash
bun --filter <pattern> <script>

Предположим, у вас есть монорепозиторий с двумя пакетами: packages/api и packages/frontend, оба со скриптом dev, который запускает локальный сервер разработки. Обычно вам пришлось бы открыть две отдельные вкладки терминала, перейти в каталог каждого пакета и выполнить bun dev:

bash
cd packages/api
bun dev

# в другом терминале
cd packages/frontend
bun dev

Используя --filter, вы можете запустить скрипт dev в обоих пакетах одновременно:

bash
bun --filter '*' dev

Обе команды будут выполняться параллельно, и вы увидите удобный интерфейс терминала, показывающий их соответствующие выходные данные:

Запуск скриптов в рабочих областях

Фильтры уважают вашу конфигурацию рабочей области: Если у вас есть файл package.json, который указывает, какие пакеты являются частью рабочей области, --filter будет ограничен только этими пакетами. Также в рабочей области вы можете использовать --filter для запуска скриптов в пакетах, расположенных в любом месте рабочей области:

bash
# Пакеты
# src/foo
# src/bar

# в src/bar: запускает myscript в src/foo, не нужно cd!
bun run --filter foo myscript

Порядок зависимостей

Bun уважает порядок зависимостей при запуске скриптов. Предположим, у вас есть пакет foo, который зависит от другого пакета bar в вашей рабочей области, и оба пакета имеют скрипт build. При запуске bun --filter '*' build вы заметите, что foo начнет выполняться только после завершения bar.

Bun от www.bunjs.com.cn