Workspace
Quando crei un nuovo workspace con @aws/nx-plugin, il generatore preset configura un monorepo Nx con impostazioni predefinite sensate per costruire su AWS.
Creazione di un Workspace
Sezione intitolata “Creazione di un Workspace”pnpm create @aws/nx-workspace my-projectyarn create @aws/nx-workspace my-projectnpm create @aws/nx-workspace -- my-projectbun create @aws/nx-workspace my-projectOpzioni
Sezione intitolata “Opzioni”| Parametro | Tipo | Predefinito | Descrizione |
|---|---|---|---|
| addTsPlugin | boolean | true | Se aggiungere il plugin ts. |
| iacProvider | string | CDK | Il provider IaC preferito. |
| gitSecrets | boolean | true | Se configurare git-secrets per impedire il commit di credenziali AWS. |
| containerEngine | string | infer | Il motore di container da utilizzare per build/push/login. 'infer' seleziona docker se installato, altrimenti finch (con fallback a docker quando nessuno dei due è installato). |
Struttura del Workspace
Sezione intitolata “Struttura del Workspace”Directorypackages/ I tuoi progetti risiedono qui
- …
- package.json Root package.json per il tuo monorepo
- nx.json Configurazione Nx (target comuni, generatori di sincronizzazione, caching)
- tsconfig.base.json Configurazione TypeScript radice
- aws-nx-plugin.config.mts Configurazione Nx Plugin for AWS
Directory.git-secrets/ Script bash git-secrets vendorizzato per la scansione delle credenziali
- …
Directory.husky/ Hook Git
- …
Nx è un sistema di build indipendente dal linguaggio per monorepo, che gestisce le dipendenze tra progetti scritti in qualsiasi linguaggio di programmazione e i task per compilarli. Puoi saperne di più sul sito web di Nx.
Progetti
Sezione intitolata “Progetti”Un monorepo Nx è composto da uno o più progetti, ciascuno con un file project.json. Il project.json definisce i task di un progetto, noti come target, che definiscono come un progetto viene compilato, eseguito localmente, testato, ecc. Definisce anche le dipendenze tra target all’interno o tra progetti.
Ad esempio, un project.json potrebbe definire un target build che dipende dalla compilazione di tutti i progetti upstream:
{ "name": "@my-workspace/my-project", "targets": { "build": { "executor": "@nx/js:tsc", "dependsOn": ["^build"] }, "test": { "command": "vitest run" } }}Per dettagli su come vengono configurati i progetti TypeScript e Python, consulta le guide dei generatori ts#project e py#project.
Caching
Sezione intitolata “Caching”Nx memorizza nella cache l’output dei target eseguiti in precedenza e li riproduce quando gli input non sono cambiati. Questo velocizza notevolmente build, test e linting — specialmente in CI. Se riscontri comportamenti obsoleti o inaspettati, reimposta la cache con:
pnpm nx resetyarn nx resetnpx nx resetbunx nx resetPer maggiori dettagli, consulta la documentazione sulla cache di Nx.
Single Version Policy
Sezione intitolata “Single Version Policy”La configurazione predefinita del monorepo utilizza una single version policy sia per i progetti basati su Node che su Python.
Ciò significa che tutti i progetti all’interno del tuo monorepo utilizzano la stessa versione delle dipendenze per impostazione predefinita, riducendo i problemi relativi ai pacchetti nello stesso monorepo che incorrono in problemi di mancata corrispondenza delle versioni.
Dal punto di vista di Node, questo significa un singolo lockfile alla radice con un singolo node_modules contenente tutte le dipendenze. Se devi aggiungere una nuova dipendenza, aggiungila nel package.json radice.
Dal punto di vista di Python, questo significa un singolo .venv nella radice del monorepo con tutte le dipendenze installate al suo interno. Ogni progetto Python ha il proprio pyproject.toml, ma le versioni di tali dipendenze sono gestite dal workspace UV e successivamente scritte nel file uv.lock nella radice.
Comandi Comuni
Sezione intitolata “Comandi Comuni”Compila tutti i progetti nel workspace:
pnpm buildyarn buildnpm run buildbun buildEsegui il lint e correggi automaticamente tutti i progetti:
pnpm lintyarn lintnpm run lintbun lintEsegui i test su tutti i progetti:
pnpm testyarn testnpm run testbun testSe hai un sito web, avvialo insieme a tutti i componenti connessi localmente:
pnpm devyarn devnpm run devbun devEsegui qualsiasi sync generator, che ad esempio sincronizza i riferimenti di progetto TypeScript (consulta la guida del generatore ts#project per maggiori dettagli):
pnpm nx syncyarn nx syncnpx nx syncbunx nx syncEseguire Target Specifici
Sezione intitolata “Eseguire Target Specifici”Puoi eseguire target specifici per progetti specifici con:
pnpm nx <target> <project>yarn nx <target> <project>npx nx <target> <project>bunx nx <target> <project>Ad esempio:
pnpm nx build websiteyarn nx build websitenpx nx build websitebunx nx build websiteQuesto eseguirà il target scelto così come i target da cui dipende.
Cosa è Incluso
Sezione intitolata “Cosa è Incluso”Linting
Sezione intitolata “Linting”I nuovi workspace sono configurati con ESLint per l’analisi statica e Prettier per la formattazione del codice. L’esecuzione di lint applica entrambi a tutti i progetti.
Git Secrets
Sezione intitolata “Git Secrets”I nuovi workspace includono hook pre-commit di git-secrets che scansionano i file in staging alla ricerca di pattern di credenziali AWS prima di ogni commit. Questo previene il commit accidentale di access key, secret key e altri valori sensibili.
Soppressione dei Falsi Positivi
Sezione intitolata “Soppressione dei Falsi Positivi”I pattern in git-secrets utilizzano espressioni regolari compatibili con egrep. Se git-secrets blocca un commit che non contiene credenziali reali:
# Consenti un pattern regex specificogit secrets --add --allowed 'my-regex-pattern'
# Consenti una stringa letterale (i caratteri speciali vengono escapati)git secrets --add --allowed --literal 'my-literal+string'Puoi anche creare un file .gitallowed nella radice del repository con una regex compatibile con egrep per riga (condiviso con il tuo team tramite controllo di versione):
# Allow test fixturestests/fixtures/.*# Allow a specific stringEXAMPLE[A-Z]{16}Per dettagli completi sulla gestione dei pattern, consulta la documentazione di git-secrets.
Configurazione Nx Plugin for AWS
Sezione intitolata “Configurazione Nx Plugin for AWS”Il workspace include un file aws-nx-plugin.config.mts nella radice. I generatori leggono questo file per scegliere impostazioni predefinite sensate in modo da non dover passare gli stessi flag ogni volta. Due impostazioni sono particolarmente utili:
// aws-nx-plugin.config.mtsimport { AwsNxPluginConfig } from '@aws/nx-plugin';
export default { iac: { provider: 'CDK', // or 'Terraform' }, containers: { engine: 'docker', // or 'finch' },} satisfies AwsNxPluginConfig;iac.provider— il provider infrastructure-as-code predefinito (CDKoTerraform) utilizzato dai generatori che emettono infrastruttura (ad es.ts#infra,ts#trpc-api,py#fast-api). I generatori che accettano un flag--iacProviderhanno come valore predefinitoInherit, che legge questo valore.containers.engine— la CLI dei container (dockerofinch) integrata nei comandi generati di build/push/login. Anche le build di image-asset CDK utilizzano questo valore tramite la variabile d’ambienteCDK_DOCKER. Consulta la guida al bundling Docker per i dettagli.
Puoi modificare entrambe le impostazioni in qualsiasi momento — le successive esecuzioni dei generatori utilizzeranno il nuovo valore.