$ ps-lando
Guías

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:

  1. 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.
  2. Filtros de glob--exclude=<glob> y --only=<glob> (repetibles, picomatch, case-insensitive) para CI / scripts / configs. Ambos también viven en pslando.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 excludePatterns de .ps-lando.json para que db reset reaplique 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 por pslando 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=stbanner instala solo ese módulo.
  • Core mínimo pelado → combina varios --exclude o 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:

GrupoGlob equivalenteMódulos
blogstblog*stblog, stblogarchives, stblogblockcategory, stblogcomments, stblogeditor, stblogfeaturedarticles, stbloglinknav, stblogrecentarticles, stblogrelatedarticles, stblogsearch, stblogtags
easybuildersteasybuilder*steasybuilder, steasy_trans_panda
socialstcontact* stnewsletter* stsocial* stinstagram* (subset)stsocial, stfblikebox, stinstagram, sttwitterembeddedtimelines
marketingstcountdown* 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-skipped

Mó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.zip

Ejecuta 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 / --only vacíos, instala todo.
  • ps-lando create -y --exclude=stblog* → todos los módulos detectados quedan seleccionados por el multiselect implícito, luego stblog* se filtra antes del install.
  • ps-lando create -y --only=stbanner → solo stbanner se 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.

Siguientes pasos

On this page