I monorepo e i workspace multi-package richiedono particolare attenzione nei blueprint, perché sottodirectory diverse possono usare linguaggi, gestori di pacchetti o set di dipendenze differenti. Devin supporta due approcci:Documentation Index
Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
Use this file to discover all available pages before exploring further.
Workspace nativi (consigliato)
Crea un blueprint separato per ogni sottodirectory. Ogni workspace ha le proprie sezioni initialize, maintenance e Knowledge, con la directory di lavoro impostata automaticamente sulla sottodirectory corrispondente.
Subshells
Esegui i comandi nelle sottodirectory all’interno di un singolo blueprint usando
(cd dir && command). È più semplice per monorepo di piccole dimensioni con pochi package.Workspace nativi
Consigliati per la maggior parte dei monorepo. I workspace nativi forniscono a ogni sottodirectory il proprio blueprint, con setup, Knowledge e directory di lavoro isolati. Questa soluzione è più ordinata e più facile da mantenere rispetto ai subshells, man mano che aumenta il numero di package.
cd o di subshells.
Il blueprint radice
Creare un workspace
- Vai a Settings > Environment > Blueprints
- Fai clic sul repository
- Fai clic su Add workspace
- Inserisci il percorso della sottodirectory (ad es.
packages/frontend) - Scrivi il blueprint per quel workspace
Esempio
- Root
- packages/frontend
- packages/backend
knowledge di ciascun workspace sono limitate a quella sottodirectory. Quando Devin lavora in packages/frontend, vede i comandi lint/test/dev del frontend, non quelli del backend.
Quando usare i workspace nativi
- Le sottodirectory usano linguaggi o gestori di pacchetti diversi
- Ogni package ha bisogno di proprie voci di Knowledge (comandi di lint, test, build)
- Vuoi una configurazione isolata — un blueprint non funzionante in un workspace non blocca gli altri
- Il numero di package è in crescita e un singolo blueprint sta diventando difficile da gestire
Subshells
(cd ... && ...) creano una subshell. Quando la subshell termina, la directory di lavoro torna alla radice della repo per il passaggio successivo.
Perché le subshell sono importanti
- Corretto (subshell)
- Errato (senza subshell)
packages/ corretta.Quando usare le subshell
- Il monorepo ha pochi pacchetti con una configurazione semplice
- Tutti i pacchetti condividono lo stesso linguaggio di programmazione e lo stesso gestore di pacchetti
- Non sono necessarie voci di Knowledge per singolo pacchetto
Voci di Knowledge per i monorepo
Esempi
Workspace Turborepo / Nx
Più versioni del JDK
Buone pratiche
Preferisci workspace nativi per i monorepo complessi
Preferisci workspace nativi per i monorepo complessi
Quando ogni sottodirectory ha il proprio linguaggio, gestore di pacchetti o processo di build, i workspace nativi mantengono ogni blueprint focalizzato e indipendente. Riserva le subshell ai casi semplici con pochi pacchetti.
Usa sempre le subshell per i cambi di directory
Usa sempre le subshell per i cambi di directory
Quando usi l’approccio basato su subshell, racchiudi i comandi
cd tra parentesi: (cd dir && command). Questo impedisce che il cambio di directory di un passaggio influisca su quello successivo.Metti gli strumenti condivisi nel blueprint dell'org
Metti gli strumenti condivisi nel blueprint dell'org
I runtime dei linguaggi e i gestori di pacchetti usati in più repo appartengono al blueprint per tutta l’org. Questo evita duplicazioni e mantiene i blueprint delle repo focalizzati sulla configurazione specifica del progetto.
Ordina i passaggi di maintenance in base alle dipendenze
Ordina i passaggi di maintenance in base alle dipendenze
Se il pacchetto A dipende dal fatto che il pacchetto B venga compilato per primo, elenca il passaggio di build di B prima del passaggio di installazione di A in
maintenance. I passaggi del blueprint vengono eseguiti in sequenza nell’ordine indicato.Aggiungi una voce di Knowledge sulla struttura
Aggiungi una voce di Knowledge sulla struttura
Una voce di Knowledge chiamata
structure, che associa le directory ai rispettivi linguaggi e strumenti, aiuta Devin a orientarsi nella codebase. Includi quale gestore di pacchetti usa ogni sottodirectory ed eventuali dipendenze tra pacchetti.Usa voci di Knowledge per pacchetto
Usa voci di Knowledge per pacchetto
Invece di un’unica grande voce di Knowledge, crea voci separate per ogni pacchetto (ad es.
frontend, backend, ml-pipeline). Con i workspace nativi, ogni workspace include già la propria sezione Knowledge.Mantieni incrementale la sezione maintenance
Mantieni incrementale la sezione maintenance
Usa
pnpm install (non pnpm install --force) e uv sync (non rm -rf .venv && uv sync). I comandi incrementali sono più veloci durante le ricostruzioni periodiche.- Configurazione dichiarativa dell’ambiente
- Riferimento del blueprint
- Libreria dei template — con template monorepo pronti all’uso
