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
.csprojo.sln, un lockfile.pcpm initen la raíz del proyecto es suficiente. No se escribepcpm-workspace.yaml. - Monorepo — muchos proyectos, un lockfile.
pcpm-workspace.yamlvive 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:
- Tienes más de un proyecto que debería compartir un lockfile.
- 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
.csprojo.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/*ylibs/*(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.