shopify theme check --path vs Argumentos posicionales: La guía de sintaxis definitiva
Descubre por qué shopify theme check --path es la única forma válida de limitar una ejecución de linting y por qué los argumentos de archivo posicionales
Usa shopify theme check --path ./your-theme para limitar una ejecución de linting a un directorio. No hay argumentos posicionales en el Shopify CLI actual: shopify theme check ./sections/header.liquid es una sintaxis inválida y el CLI no hará linting de ese archivo. El flag --path es el único mecanismo que expone la herramienta para limitar el alcance de un directorio.
Puntos clave
--pathlimita la ejecución a un directorio; no acepta una ruta de archivo individual.- Los argumentos posicionales (por ejemplo,
shopify theme check ./sections/header.liquid) no están soportados y no producen resultados útiles. - Omitir
--pathpor defecto usa el directorio de trabajo actual. - La variable de entorno
SHOPIFY_FLAG_PATHes el equivalente de CI de--path. - Desde CLI 4.0 (lanzado en mayo de 2026), se requieren Node 22.12+ y Git 2.28+.
La confusión principal: por qué el comando parece que debería aceptar un archivo
Todos los linters populares (ESLint, Stylelint, RuboCop) aceptan un archivo posicional o un glob:
eslint src/main.js # válido
stylelint "src/**/*.css" # válido
shopify theme check ./sections/header.liquid # INVÁLIDO
Shopify Theme Check no sigue esa convención. El comando theme check del CLI no acepta argumentos posicionales en absoluto. Si pasas una ruta como argumento posicional, el CLI no muestra un error de forma evidente; simplemente la ignora y hace linting del directorio de trabajo actual en su lugar. Ese fallback silencioso es lo que hace que este bug sea difícil de encontrar.
Esto importa más de lo que parece. Los desarrolladores depurando un archivo problemático a menudo ejecutan shopify theme check ./snippets/icon-sprite.liquid, ven un reporte de tema completo, asumen que la verificación pasó para ese archivo, y lo envían. La verificación nunca se ejecutó de forma aislada.
El flag --path: qué hace realmente
El flag --path le dice a Theme Check cuál es la carpeta que debe usar como raíz del tema. Por defecto usa el directorio de trabajo actual cuando se omite.
# Hacer linting del tema en el directorio actual (implícito)
shopify theme check
# Hacer linting de un tema en un subdirectorio
shopify theme check --path ./my-theme
# Hacer linting de un tema en una carpeta de salida de construcción
shopify theme check --path ./dist
Importante: --path debe apuntar a un directorio que contenga la estructura de carpetas estándar de Shopify (templates/, sections/, snippets/, etc.). Pasarle una ruta de archivo individual tampoco es válido.
El equivalente de variable de entorno es SHOPIFY_FLAG_PATH, que sigue el patrón de nomenclatura estándar SHOPIFY_FLAG_* que casi todos los demás flags usan en el CLI actual.
Referencia completa de flags para shopify theme check
Aquí están todos los flags que realmente usarás, con sus propósitos:
| Flag | Corto | Qué hace | Por defecto |
|---|---|---|---|
--path | (ninguno) | Establece el directorio raíz del tema a linter | Directorio de trabajo actual |
--fail-level | (ninguno) | Salida código 1 cuando se encuentran problemas de esta severidad o superior | error |
--auto-correct | -a | Corrige automáticamente las infracciones que admiten corrección | Desactivado |
--config | -C | Reemplaza .theme-check.yml con un preset de configuración nombrado | .theme-check.yml en raíz |
--output | -o | Formato de salida: text o json | text |
--init | (ninguno) | Genera un .theme-check.yml inicial en la raíz del tema | N/A |
--no-color | (ninguno) | Desactiva los códigos de color ANSI (útil en logs de CI) | Color activado |
--verbose | (ninguno) | Aumenta la verbosidad de la salida | Desactivado |
El flag --fail-level es especialmente importante para tuberías de CI. Por defecto, Theme Check solo sale con código 1 en problemas de severidad error. Si también quieres bloquear en advertencias, debes ser explícito:
shopify theme check --path ./theme --fail-level warning
Por qué no puedes hacer linting de un archivo individual con el CLI
Theme Check está diseñado como un linter de tema completo, no un linter de archivo. Muchas verificaciones dependen del contexto entre archivos:
UnusedSnippetnecesita saber cada archivo que llama a{% render %}.TranslationKeyExistsnecesita leer archivos de locales junto con tu Liquid.MissingTemplatenecesita el directorio completotemplates/para verificar referencias.
Ejecutar una verificación de un solo archivo produciría resultados sin sentido para esas reglas entre archivos. Esa es una decisión de diseño deliberada, no un descuido. Si quieres retroalimentación por archivo mientras escribes, usa la extensión Shopify Liquid VS Code, que ejecuta el Protocolo de Servidor de Lenguaje (LSP) de Theme Check en tiempo real.
Fue un salto significativo cuando se lanzó Theme Check 2.0, unificando el linter y agregando características de LSP como documentos flotantes y autocompletado para configuraciones, traducciones, HTML y Liquid directamente dentro de los editores.
Qué cambió en CLI 4.0 (Mayo de 2026)
Si estás ejecutando tutoriales más antiguos, ten en cuenta que Shopify CLI 4.0, lanzado en mayo de 2026, introdujo varios cambios que afectan cómo se ejecuta theme check:
- Autoactualizacion por defecto: El CLI ahora se auto-actualiza a través de tu gestor de paquetes. La autoactualizacion se omite en entornos de CI y en bumps de versión mayor.
- Se requiere Node 22.12+ y Git 2.28+. Las versiones anteriores de Node lanzarán errores al instalar.
theme initahora clona Skeleton, no Dawn. Esto afecta qué estructura de tema se genera para nuevas construcciones.- Sin comandos de login interactivos: No hay
shopify loginoshopify whoamien el CLI actual. La autenticación está basada en tokens.
Para tuberías de CI/CD, el patrón no interactivo documentado sigue siendo una puerta de linter seguida de un push:
shopify theme check --path ./theme --fail-level error
shopify theme push --json --theme staging
Limitando Theme Check en CI: la forma correcta
Aquí hay un paso de GitHub Actions mínimo pero listo para producción:
name: Theme Check
on: [push, pull_request]
jobs:
theme-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v4
with:
node-version: '22'
- name: Install Shopify CLI
run: npm install -g @shopify/cli @shopify/theme
- name: Run Theme Check
run: shopify theme check --path . --fail-level warning
env:
SHOPIFY_FLAG_STORE: ${{ secrets.SHOPIFY_STORE }}
Si usas la theme-check-action@v2 oficial de Shopify, el equivalente de path es la entrada theme_root, no un argumento posicional:
- uses: Shopify/theme-check-action@v2
with:
theme_root: './dist'
flags: '--fail-level warning'
La entrada theme_root se asigna a --path internamente. La entrada flags te permite pasar cualquier flag adicional, incluyendo --fail-level.
Tres enfoques comparados
| Enfoque | Sintaxis válida | Cuándo usar | Compensación |
|---|---|---|---|
shopify theme check | Sí | Desarrollo local, el tema está en cwd | No se necesita limitación de path |
shopify theme check --path ./dist | Sí | Salida de construcción o estructura de monorepo | Requiere layout de directorio correcto |
shopify theme check ./sections/header.liquid | No | Nunca | Ignorado silenciosamente; hace linting de cwd en su lugar |
shopify theme check --path ./sections/header.liquid | No | Nunca | No es un directorio raíz de tema |
Shopify/theme-check-action@v2 con theme_root | Sí | GitHub Actions CI | Acción oficial; maneja casos límite de auth |
Silenciando falsos positivos sin desactivar verificaciones completas
Si Theme Check marca código válido (un filtro Liquid personalizado, una etiqueta de terceros), usa comentarios de supresión en línea en lugar de desactivar la verificación completa globalmente:
{% # theme-check-disable LiquidTag %}
{{ product.title | my_custom_filter }}
{% # theme-check-enable LiquidTag %}
Para falsos positivos persistentes en múltiples archivos, la clave ignore en .theme-check.yml es más limpia:
LiquidTag:
enabled: true
ignore:
- snippets/vendor-component.liquid
Puedes generar una configuración inicial en cualquier momento con shopify theme check --init, que escribe un .theme-check.yml precargado con las configuraciones recomendadas de Shopify.
La cadena de precedencia de variables de entorno
La precedencia en el CLI actual es: flag > variable de entorno > shopify.theme.toml. Un flag --path en la línea de comandos anula SHOPIFY_FLAG_PATH en el entorno, que anula cualquier path establecido en el archivo toml. Un flag en línea perdido en un script anulará silenciosamente una variable de entorno de CI, que es una fuente común de confusión tipo "funciona localmente pero no en CI".
Si tu paso de CI aún está pidiendo interactivamente, agrega SHOPIFY_FLAG_FORCE=1 para suprimir avisos de confirmación.
Para una mirada más profunda a cómo encaja un flujo de trabajo profesional de desarrollo de temas, consulta mi guía sobre mejores prácticas de desarrollo de temas Shopify con Liquid. Si estás optimizando el rendimiento front-end de tu tema junto con linting, optimización de velocidad Shopify cubre el lado complementario del tiempo de ejecución.
Preguntas frecuentes
¿Puedo ejecutar shopify theme check en un archivo Liquid individual?
No. El Shopify CLI actual no acepta argumentos de archivo posicionales. Pasar una ruta de archivo como argumento posicional se ignora silenciosamente y la herramienta hace linting del directorio de trabajo actual en su lugar. Para retroalimentación por archivo en tiempo real, usa la extensión Shopify Liquid VS Code, que ejecuta el servidor LSP de Theme Check mientras escribes.
¿Cuál es la diferencia entre --path y un argumento posicional en shopify theme check?
El flag --path es un flag nombrado que establece el directorio raíz del tema para la ejecución de linting. Un argumento posicional sería una ruta desnuda escrita después del comando sin nombre de flag, como 'shopify theme check ./my-theme'. Shopify CLI no soporta argumentos posicionales para theme check, así que solo funciona --path.
¿Cómo limito shopify theme check a una subcarpeta en un monorepo?
Usa el flag --path apuntando al subdirectorio que contiene la estructura de carpetas estándar de Shopify (templates/, sections/, snippets/). Por ejemplo: 'shopify theme check --path ./packages/storefront-theme'. La subcarpeta debe ser una raíz de tema completa, no un directorio parcial como sections/ solamente.