Skip to content

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:

bash
# 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:

bash
# 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:

bash
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:

bash
cd packages/api
bun dev

# in un altro terminale
cd packages/frontend
bun dev

Usando --filter, puoi eseguire lo script dev in entrambi i pacchetti contemporaneamente:

bash
bun --filter '*' dev

Entrambi 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:

bash
# Pacchetti
# src/foo
# src/bar

# in src/bar: esegue myscript in src/foo, non serve cd!
bun run --filter foo myscript

Ordine 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.

Bun a cura di www.bunjs.com.cn