Il flag --filter (o -F) è usato per selezionare pacchetti per pattern in un monorepo. I pattern possono essere usati per corrispondere ai nomi dei pacchetti o ai percorsi dei pacchetti, con supporto completo per la sintassi glob.
Attualmente --filter è supportato da bun install e bun outdated, e può anche essere usato per eseguire script per più pacchetti contemporaneamente.
Corrispondenza
Nome Pacchetto --filter <pattern>
I pattern di nome selezionano i pacchetti in base al nome del pacchetto, come specificato in package.json. Ad esempio, se hai pacchetti pkg-a, pkg-b e other, puoi corrispondere tutti i pacchetti con *, solo pkg-a e pkg-b con pkg*, e un pacchetto specifico fornendo il nome completo del pacchetto.
Percorso Pacchetto --filter ./<glob>
I pattern di percorso sono specificati iniziando il pattern con ./, e selezioneranno tutti i pacchetti nelle directory che corrispondono al pattern. Ad esempio, per corrispondere tutti i pacchetti nelle sottodirectory di packages, puoi usare --filter './packages/**'. Per corrispondere un pacchetto situato in packages/foo, usa --filter ./packages/foo.
bun install e bun outdated
Sia bun install che bun outdated supportano il flag --filter.
bun install per impostazione predefinita installerà le dipendenze per tutti i pacchetti nel monorepo. Per installare le dipendenze per pacchetti specifici, usa --filter.
Dato un monorepo con spazi di lavoro pkg-a, pkg-b, e pkg-c sotto ./packages:
# Installa dipendenze per tutti gli spazi di lavoro tranne `pkg-c`
bun install --filter '!pkg-c'
# Installa dipendenze per i pacchetti in `./packages` (`pkg-a`, `pkg-b`, `pkg-c`)
bun install --filter './packages/*'
# Come sopra, ma escludi il package.json radice
bun install --filter '!./' --filter './packages/*'Allo stesso modo, bun outdated mostrerà le dipendenze obsolete per tutti i pacchetti nel monorepo, e --filter può essere usato per limitare il comando a un sottoinsieme dei pacchetti:
# Mostra dipendenze obsolete per spazi di lavoro che iniziano con `pkg-`
bun outdated --filter 'pkg-*'
# Mostra dipendenze obsolete solo per il package.json radice
bun outdated --filter './'Per maggiori informazioni su entrambi questi comandi, vedi bun install e bun outdated.
Eseguire script con --filter
Usa il flag --filter per eseguire script in più pacchetti contemporaneamente:
bun --filter <pattern> <script>Diciamo che hai un monorepo con due pacchetti: packages/api e packages/frontend, entrambi con uno script dev che avvierà un server di sviluppo locale. Normalmente, dovresti aprire due schede di terminale separate, cd in ogni directory di pacchetto, ed eseguire bun dev:
cd packages/api
bun dev
# in un altro terminale
cd packages/frontend
bun devUsando --filter, puoi eseguire lo script dev in entrambi i pacchetti contemporaneamente:
bun --filter '*' devEntrambi i comandi verranno eseguiti in parallelo, e vedrai una bella interfaccia utente del terminale che mostra i rispettivi output:
Eseguire script negli spazi di lavoro
I filtri rispettano la tua configurazione dello spazio di lavoro: Se hai un file package.json che specifica quali pacchetti fanno parte dello spazio di lavoro, --filter sarà limitato solo a questi pacchetti. Inoltre, in uno spazio di lavoro puoi usare --filter per eseguire script in pacchetti che si trovano ovunque nello spazio di lavoro:
# Pacchetti
# src/foo
# src/bar
# in src/bar: esegue myscript in src/foo, non serve cd!
bun run --filter foo myscriptOrdine delle Dipendenze
Bun rispetterà l'ordine delle dipendenze quando esegue gli script. Diciamo che hai un pacchetto foo che dipende da un altro pacchetto bar nel tuo spazio di lavoro, e entrambi i pacchetti hanno uno script build. Quando esegui bun --filter '*' build, noterai che foo inizierà a eseguirsi solo quando bar ha finito.