es

Configuración del workspace

Proyecto único vs monorepo, y cómo PCPM descubre tus proyectos.

Un “workspace” en PCPM es la frontera para un único pcpm.lock. Todo lo que está dentro de un workspace comparte un lockfile, un store y un pcpm.json.

Hay dos sabores:

  • Proyecto único — un .csproj o .sln, un lockfile. pcpm init en la raíz del proyecto es suficiente. No se escribe pcpm-workspace.yaml.
  • Monorepo — muchos proyectos, un lockfile. pcpm-workspace.yaml vive en la raíz del repo y le dice a PCPM qué proyectos incluir.

Proyecto único

El caso más simple. Tienes un .csproj (o un .sln que apunta a uno), y PCPM trata el directorio como un workspace de un solo proyecto.

my-app/
├── my-app.csproj
├── Program.cs
├── pcpm.json                    # creado por pcpm init
└── Directory.Packages.props     # creado o adoptado por pcpm init

Ejecuta pcpm init en la raíz del proyecto. Listo.

Solución multi-proyecto (sin monorepo)

Si tienes un .sln con varios .csproj, ejecuta pcpm init en la raíz de la solución. PCPM recorre el .sln y trata cada proyecto como parte del workspace.

my-solution/
├── my-solution.sln
├── src/
│   ├── Api/Api.csproj
│   └── Worker/Worker.csproj
├── tests/
│   └── Api.Tests/Api.Tests.csproj
├── pcpm.json
└── Directory.Packages.props

Todos los proyectos comparten un lockfile y un store. Añadir una dependencia con pcpm add escribe <PackageReference /> en cada proyecto por defecto; usa --project src/Api/Api.csproj para dirigirte a uno solo.

Monorepo

Un monorepo en términos de PCPM es “un repo con varios proyectos, más un pcpm-workspace.yaml que le dice a PCPM cómo encontrarlos”. El fichero YAML es un manifiesto de globs de proyectos, similar en espíritu a pnpm-workspace.yaml.

¿Cuándo lo necesitas?

Necesitas pcpm-workspace.yaml si se cumplen ambas condiciones:

  1. Tienes más de un proyecto que debería compartir un lockfile.
  2. La disposición de tu proyecto no sigue las reglas de descubrimiento por defecto.

Descubrimiento por defecto:

  • Se recorre el árbol de directorios desde la raíz del workspace.
  • Se recoge cualquier .csproj o .sln.
  • Se excluyen los directorios bin/, obj/, node_modules/ y .git/.

Si tu layout no encaja (p. ej. los proyectos están en apps/*, o quieres excluir un subdirectorio concreto), escribe un pcpm-workspace.yaml.

Ejemplo mínimo

# pcpm-workspace.yaml
packages:
  - "apps/*"
  - "libs/*"
  - "tools/cli/*.csproj"
exclude:
  - "**/*.Tests.csproj"

Esto le dice a PCPM que:

  • Busque en apps/* y libs/* (un nivel de profundidad, solo directorios).
  • También incluya tools/cli/SomeApp.csproj (la ruta es explícita).
  • Se salte cualquier proyecto que termine en .Tests.csproj.

Validando tu workspace

pcpm list --workspace

Lista cada proyecto que PCPM descubrió, junto con sus referencias de paquetes. Si falta un proyecto, comprueba tus globs. Si aparece uno de más, añádelo a exclude.

¿Qué hay en pcpm.json?

pcpm.json es el manifiesto que PCPM escribe cuando ejecutas pcpm init. Es pequeño y amigable para humanos:

{
  "version": "1.0",
  "store": {
    "path": null,
    "auto": true
  },
  "feeds": [
    {
      "name": "nuget.org",
      "url": "https://api.nuget.org/v3/index.json"
    }
  ],
  "updateCheck": true,
  "lockfile": {
    "floating": "pin"
  }
}

Casi nunca necesitas editar esto a mano. Ver Configuración para el esquema completo.