Selección de módulos
Usa --exclude / --only (globs) o pslando.config.json para filtrar qué módulos se instalan.
Desde 1.0.0 (1.0.0), ps-lando elige los módulos en dos capas:
- Multiselect interactivo durante
create— cada zip de módulo detectado en el cwd está pre-marcado. Desmarca lo que no quieras, dale a enter y esos zips no entran al grafo de install. - Filtros de glob —
--exclude=<glob>y--only=<glob>(repetibles, picomatch, case-insensitive) para CI / scripts / configs. Ambos también viven enpslando.config.json.
Las flags de grupo pre-1.0 (--skip-easybuilder, --skip-blog, --skip-social, --skip-marketing) fueron eliminadas — usarlas ahora termina con exit 64 y un hint de migración en stderr.
Breaking change en 1.0.0. Las cuatro flags --skip-* ya no existen. Mira la guía Migración desde 0.x para una tabla de reemplazo paso a paso.
El multiselect interactivo
Ejecuta ps-lando create (sin -y) en una carpeta con uno o más zips de módulos:
? Pick modules to install · multiple selection
● steasybuilder
● steasy_trans_panda
● stmegamenu
● stbanner
○ stblog ← desmarcado a mano
● stsocial- Por defecto, todos los módulos detectados van pre-marcados (back-compat con el "install everything" de v0.6).
- La selección se escribe en
excludePatternsde.ps-lando.jsonpara quedb resetreaplique el mismo set. - Con
-y: el prompt se salta y se instalan todos los módulos detectados (equivale a un multiselect totalmente marcado). - La CLI solo considera los zips soltados en el cwd (o
--zips=<dir>). Los módulos pre-instalados de PS dentro del download de PS nunca se reinstalan porpslando create— eso arregló el bug de 1.0.0-rc.1 donde se colaban módulos stock.
Por qué --exclude genérico
ps-lando viene con defaults zero-config sensatos — instala cada módulo de tema incluido en tu zip de tema más cualquier st* / module-* zip al lado. Es lo correcto para el primer sandbox. Pero:
- No todas las tiendas tienen blog →
--exclude=stblog*quita los módulos de blog en una expresión. - Sin Easy Builder → omite los zips, o
--exclude=steasybuilder*si están alrededor. - Reproduces un bug de un único módulo →
--only=stbannerinstala solo ese módulo. - Core mínimo pelado → combina varios
--excludeo defínelos en config.
Los globs son estilo picomatch (*, **, ?, [abc], !negación). Repetibles. Componen con --only. Case-insensitive.
La flag --exclude
# Saltar los módulos de blog
ps-lando create -y --exclude=stblog*
# Saltar Easy Builder + bridge
ps-lando create -y --exclude=steasybuilder*
# Saltar blog Y módulos sociales en una sola ejecución
ps-lando create -y --exclude=stblog* --exclude=stsocial* --exclude=stinstagram*
# Combinar con --only (intersección)
ps-lando install-modules --only=stbanner --exclude=stbanner-old--exclude= (vacío) termina con exit 64 (UsageError) y un hint que apunta al spec — los patrones vacíos siempre se rechazan para que un CI mal configurado no pase nada en silencio.
Filtros de grupo del preset panda
El preset panda incluido trae los mismos cuatro grupos conceptuales que las flags 0.x exponían, pero ahora se exponen como atajos de globs en pslando.config.json, no como flags. Una vez cargado el preset (auto cuando se detecta un panda*.zip, o explícito con --preset=panda), estos son los globs documentados:
| Grupo | Glob equivalente | Módulos |
|---|---|---|
blog | stblog* | stblog, stblogarchives, stblogblockcategory, stblogcomments, stblogeditor, stblogfeaturedarticles, stbloglinknav, stblogrecentarticles, stblogrelatedarticles, stblogsearch, stblogtags |
easybuilder | steasybuilder* | steasybuilder, steasy_trans_panda |
social | stcontact* stnewsletter* stsocial* stinstagram* (subset) | stsocial, stfblikebox, stinstagram, sttwitterembeddedtimelines |
marketing | stcountdown* stnewsletter* stnotification* ststickers* (subset) | stcountdown, stnewsletter, stnotification, ststickers |
Compón en config:
{
"modules": {
"exclude": ["stblog*", "steasybuilder*"]
}
}…o top-level como atajo:
{
"exclude": ["stblog*", "steasybuilder*"]
}El atajo se fusiona en modules.exclude ANTES de aplicar las flags CLI. La --exclude por CLI siempre gana.
--only — instala solo un subconjunto
# Instala SOLO dos módulos en un sandbox existente
ps-lando install-modules --only=stmegamenu --only=stbanner
# O vía config{ "modules": { "only": ["stmegamenu", "stbanner"] } }Cuando --exclude y --only están ambos activos, el resolver calcula incluidos = (filtro only) − (filtro exclude). Si el resultado es vacío, corta con un mensaje claro.
Filtrar install vs filtrar copia
Por defecto, --exclude / --only solo filtran lo que se instala — cada módulo del cwd se copia igual a modules/, así que re-ejecutar ps-lando install-modules después (sin flags) recoge los módulos que originalmente excluiste.
Pasa --no-copy-skipped para saltarte también el paso de copia — modules/ queda limpio. El log de deployModules refleja la cuenta filtrada, p. ej. "Copying 43 of 54 modules — 11 excluded via --no-copy-skipped".
--no-copy-skipped no hace nada cuando se usa sin --exclude / --only.
Combos habituales
# Tienda sin blog (auto-carga el preset panda porque panda*.zip está presente)
ps-lando create -y --exclude=stblog*
# Core mínimo: sin blog, sin Easy Builder, sin social, sin marketing
ps-lando create -y \
--exclude=stblog* \
--exclude=steasybuilder* \
--exclude=stsocial* --exclude=stfblikebox* --exclude=stinstagram* --exclude=sttwitterembeddedtimelines* \
--exclude=stcountdown* --exclude=stnewsletter* --exclude=stnotification* --exclude=ststickers*
# Lo mismo, persistido en config{
"schema": 1,
"presets": ["panda"],
"exclude": [
"stblog*",
"steasybuilder*",
"stsocial*", "stfblikebox*", "stinstagram*", "sttwitterembeddedtimelines*",
"stcountdown*", "stnewsletter*", "stnotification*", "ststickers*"
]
}# Depurando solo 2 módulos en un sandbox existente
ps-lando install-modules --only=stmegamenu --only=stbanner
# Saltar blog Y ni siquiera copiar los módulos de blog a modules/
ps-lando create -y --exclude=stblog* --no-copy-skippedMódulos desde un tema no-Panda
El mismo flujo vale para cualquier tema — Panda, Falcon, Leo Classic, el tuyo propio. Suelta el zip del tema más sus zips de módulos al lado:
my-shop/
├── leo_classic.zip ← tema, clasificado por config/theme.yml
├── stmegamenu.zip ← módulo, clasificado por stmegamenu/stmegamenu.php
├── stbanner.zip
└── stsocial.zipEjecuta ps-lando create. El prompt select de tema lista leo_classic (y None); el multiselect de módulos lista stmegamenu, stbanner, stsocial todos pre-marcados. No se dispara ningún preset (el preset panda solo matchea con el nombre literal panda), así que tienes un deploy genérico: tema extraído a themes/leo_classic/, módulos instalados en orden de dependencia, sin puente Easy Builder.
¿Quieres persistir la misma selección para db reset? Ejecuta ps-lando init después y acepta los valores auto-detectados — escribe el config + el set de zips a pslando.config.json.
Cómo interactúa -y con --exclude / --only
ps-lando create -y(sin flags) → todos los módulos detectados seleccionados,--exclude/--onlyvacíos, instala todo.ps-lando create -y --exclude=stblog*→ todos los módulos detectados quedan seleccionados por el multiselect implícito, luegostblog*se filtra antes del install.ps-lando create -y --only=stbanner→ solostbannerse instala, aunque haya otros zips presentes.
Las flags CLI siempre ganan — se aplican encima del set que produjo el multiselect (o su atajo -y).
Persistencia en .ps-lando.json
La selección resuelta se persiste en .ps-lando.json para que ps-lando db reset re-aplique el mismo filtrado al reinstalar módulos:
{
"schema": 1,
"theme": "panda",
"presets": ["panda"],
"excludePatterns": ["stblog*", "steasybuilder*"]
}Los sandboxes creados con 0.6.x se auto-elevan en la primera escritura — mira la guía de migración para el mapeo legacy → v1.