Pular para o conteúdo

Workspace

Quando você cria um novo workspace com @aws/nx-plugin, o gerador preset configura um monorepo Nx com padrões sensatos para construir na AWS.

Terminal window
pnpm create @aws/nx-workspace my-project
ParâmetroTipoPadrãoDescrição
iac cdk | terraformcdkO provedor de IaC preferido.
gitSecrets booleantrueSe deve configurar git-secrets para prevenir o commit de credenciais AWS.
mcp booleantrueSe deve configurar o Nx Plugin para servidor AWS MCP para uso por agentes de codificação.
containers infer | docker | finchinferO motor de contêineres a ser usado para build/push/login. 'infer' escolhe docker se instalado, caso contrário finch (voltando para docker quando nenhum estiver instalado).
module esm | cjsesmFormato de módulo para código TypeScript e configuração gerados.
catalog booleantrueSe os geradores registram as versões de dependências no catálogo do gerenciador de pacotes (pnpm/yarn/bun), mantendo uma única fonte de verdade para versões. Quando false, as dependências são escritas diretamente no package.json de cada projeto e manter as versões alinhadas é sua responsabilidade.
preferInstallDependencies booleantrueSe deve preferir instalar dependências após a execução do gerador. Defina como false para adiar a instalação ao executar múltiplos geradores em lote (uma instalação ainda é executada se necessário para que geradores subsequentes possam calcular o grafo de projetos Nx); instale uma vez no final.
  • Directorypackages/ Your projects live here
  • package.json Root package.json for your monorepo
  • nx.json Nx configuration (common targets, sync generators, caching)
  • tsconfig.base.json Root TypeScript configuration
  • aws-nx-plugin.config.mts Nx Plugin for AWS configuration
  • Directory.git-secrets/ Vendored git-secrets bash script for credential scanning
  • Directory.husky/ Git hooks
  • .mcp.json Nx Plugin for AWS MCP server configuration for Claude Code
  • .cursor/mcp.json …and for Cursor
  • .kiro/settings/mcp.json …and for Kiro
  • .gemini/settings.json …and for Gemini CLI
  • .vscode/mcp.json …and for GitHub Copilot
  • .codex/config.toml …and for OpenAI Codex

Nx é um sistema de build agnóstico de linguagem para monorepos, gerenciando dependências entre projetos escritos em qualquer linguagem de programação e as tarefas para construí-los. Você pode aprender mais no site do Nx.

Um monorepo Nx é composto por um ou mais projetos, cada um com um arquivo project.json. O project.json define as tarefas de um projeto, conhecidas como targets, que definem como um projeto é construído, executado localmente, testado, etc. Ele também define dependências entre targets dentro ou entre projetos.

Por exemplo, um project.json pode definir um target build que depende de todos os projetos upstream serem construídos primeiro:

packages/my-project/project.json
{
"name": "@my-workspace/my-project",
"targets": {
"build": {
"executor": "@nx/js:tsc",
"dependsOn": ["^build"]
},
"test": {
"command": "vitest run"
}
}
}

Para detalhes sobre como projetos TypeScript e Python são configurados, consulte os guias dos geradores ts#project e py#project.

Nx faz cache da saída de targets executados anteriormente e os reproduz quando as entradas não mudaram. Isso acelera dramaticamente builds, testes e linting — especialmente em CI. Se você encontrar comportamento obsoleto ou inesperado, redefina o cache com:

Terminal window
pnpm nx reset

Para mais detalhes, consulte a documentação de cache do Nx.

A configuração padrão do monorepo usa uma política de versão única para projetos baseados em Node e Python.

Isso significa que todos os projetos dentro do seu monorepo usam a mesma versão de dependências por padrão, reduzindo problemas relacionados a pacotes no mesmo monorepo encontrando problemas de incompatibilidade de versão.

De uma perspectiva Node, isso significa um único lockfile na raiz, com dependências instaladas uma vez e vinculadas a cada projeto. Cada projeto Node declara as dependências de runtime que seu código-fonte importa em seu próprio package.json, enquanto ferramentas compartilhadas de build/test ficam no devDependencies do package.json raiz. Adicione uma dependência de runtime de um projeto instalando-a naquele projeto:

Terminal window
pnpm add some-npm-package --filter my-project

Para gerenciadores de pacotes com suporte a catálogo (pnpm, yarn e bun), as versões de dependências são registradas no catálogo e referenciadas com o protocolo catalog:, mantendo uma única fonte de verdade para versões em cada package.json de cada projeto. Para npm workspaces, recomendamos syncpack para alinhar versões declaradas em múltiplos arquivos package.json.

De uma perspectiva Python, isso significa um único .venv na raiz do monorepo com todas as dependências instaladas nele. Cada projeto Python tem seu próprio pyproject.toml, mas as versões dessas dependências são gerenciadas pelo workspace UV e subsequentemente escritas no arquivo uv.lock na raiz.

Construir todos os projetos no workspace:

Terminal window
pnpm build

Fazer lint e auto-corrigir todos os projetos:

Terminal window
pnpm lint

Executar testes em todos os projetos:

Terminal window
pnpm test

Iniciar todos os servidores de desenvolvimento local em seu workspace:

Terminal window
pnpm dev

Consulte o guia de Desenvolvimento Local para mais detalhes.

Executar quaisquer geradores de sincronização, que por exemplo sincronizam referências de projeto TypeScript (consulte o guia do gerador ts#project para mais detalhes):

Terminal window
pnpm nx sync

Você pode executar targets específicos para projetos específicos com:

Terminal window
pnpm nx <target> <project>

Por exemplo:

Terminal window
pnpm nx build website

Isso executará o target escolhido, bem como os targets dos quais ele depende.

Novos workspaces são configurados com Biome para análise estática e formatação de código. Executar lint verifica todos os projetos em busca de problemas, e lint --configuration=fix os corrige automaticamente.

Novos workspaces incluem hooks de pré-commit do git-secrets que escaneiam arquivos staged em busca de padrões de credenciais AWS antes de cada commit. Isso evita commitar acidentalmente chaves de acesso, chaves secretas e outros valores sensíveis.

Padrões no git-secrets usam expressões regulares compatíveis com egrep. Se o git-secrets bloquear um commit que não contém credenciais reais:

Terminal window
# Allow a specific regex pattern
git secrets --add --allowed 'my-regex-pattern'
# Allow a literal string (special characters are escaped)
git secrets --add --allowed --literal 'my-literal+string'

Você também pode criar um arquivo .gitallowed na raiz do repositório com uma regex compatível com egrep por linha (compartilhada com sua equipe via controle de versão):

.gitallowed
# Allow test fixtures
tests/fixtures/.*
# Allow a specific string
EXAMPLE[A-Z]{16}

Para detalhes completos sobre gerenciamento de padrões, consulte a documentação do git-secrets.

O workspace vem com um arquivo aws-nx-plugin.config.mts na raiz. Os geradores leem este arquivo para escolher padrões sensatos, então você não precisa passar as mesmas flags toda vez. Duas configurações são particularmente úteis:

// aws-nx-plugin.config.mts
import { AwsNxPluginConfig } from '@aws/nx-plugin';
export default {
iac: {
provider: 'cdk', // or 'terraform'
},
containers: {
engine: 'docker', // or 'finch'
},
} satisfies AwsNxPluginConfig;
  • iac.provider — o provedor de infraestrutura como código padrão (cdk ou terraform) usado por geradores que emitem infraestrutura (por exemplo, ts#infra, ts#api, py#api). Geradores que aceitam uma flag --iac têm como padrão inherit, que lê este valor.
  • containers.engine — a CLI de contêiner (docker ou finch) incorporada nos comandos de build/push/login gerados. Builds de image-asset do CDK também capturam isso via a variável de ambiente CDK_DOCKER. Consulte o guia de bundling Docker para detalhes.

Você pode editar qualquer configuração a qualquer momento — execuções subsequentes do gerador irão capturar o novo valor.