Shopify Theme Check: Perché un singolo argomento di percorso file non funziona (e cosa fare invece)
Passare un singolo percorso file a shopify theme check fallisce silenziosamente o genera errori.
Eseguire shopify theme check ./sections/header.liquid non produce risultati utili. Il comando è sintatticamente non valido sulla CLI attuale: Theme Check non accetta un argomento di percorso file posizionale. Il flag di ambito corretto è --path, e accetta solo una directory, non un singolo file. Ecco esattamente cosa funziona, perché il linting di un singolo file funziona diversamente da quello che ti aspetti, e come collegarlo correttamente a CI.
Punti chiave
shopify theme check ./sections/header.liquidè non valido sulla CLI Shopify attuale. Non ci sono argomenti di file posizionali.- Usa
--pathper indicare una directory (per impostazione predefinita la directory di lavoro corrente se omesso). - I veri feedback single-file provengono dal Language Server VS Code (
themeCheck.onlySingleFileChecks), non dalla CLI. - Il valore predefinito di
--fail-levelèerror, quindi CI passa silenziosamente mentre gli avvisi si accumulano. Passa sempre--fail-level warning. - A partire da Shopify CLI 4.0 (maggio 2026), lo strumento richiede Node 22.12+ e si aggiorna automaticamente tramite il tuo package manager al di fuori di CI.
L'errore esatto che commettono la maggior parte degli sviluppatori
Stai modificando sections/hero.liquid, noti un potenziale problema di lint, e digiti:
shopify theme check ./sections/hero.liquid
Non succede nulla di utile. Sulla CLI attuale, quell'argomento posizionale viene semplicemente ignorato o produce un errore sulla directory tema mancante.
Questa confusione ha una causa specifica: Theme Check 2.x (la versione basata su Node fornita all'interno di Shopify CLI) ha sostituito la gem Ruby più vecchia, e la gem Ruby accettava un argomento di percorso posizionale. Tutorial più vecchi, risposte su StackOverflow e post di blog scritti prima della migrazione di Theme Check 2.x (finalizzata all'inizio del 2024, con --category e --exclude-category rimossi contemporaneamente) mostrano ancora la sintassi vecchia. Questi post sono sbagliati ora.
Come confermato dallo stesso riferimento CLI di Shopify, --path è l'unico modo per scoped una run, e scoped a una directory, non a un file.
Cosa il flag effettivamente fa
# Limita a una directory tema specifica
shopify theme check --path ./my-theme
# Per impostazione predefinita, la directory di lavoro corrente
shopify theme check
# Corregge automaticamente le violazioni risolvibili
shopify theme check -a
# Cambia quale livello di gravità causa un'uscita diversa da zero
shopify theme check --fail-level warning
# Output leggibile dalla macchina (array piatto per file)
shopify theme check -o json > results.json
# Elenca ogni controllo attivo e la sua gravità
shopify theme check --list
--path dice a Theme Check quale directory trattare come root tema. Ogni file all'interno di quella directory (template, sezioni, snippet, layout, asset) viene verificato in una sola passata. Non puoi limitarlo a un singolo file a livello CLI.
Come effettivamente eseguire il lint di un singolo file: l'approccio Language Server
La CLI è uno strumento per tema completo. Il feedback single-file è il lavoro del Shopify Liquid Language Server, che alimenta l'estensione Shopify Liquid per VS Code.
L'estensione espone un'impostazione chiamata themeCheck.onlySingleFileChecks. Quando impostata a true, disabilita i controlli di tema intero (come UnusedSnippet e TranslationKeyExists) e controlla solo i file attualmente aperti nell'editor. Questo fa sì che i controlli textDocument/didChange si eseguano circa 125 volte più velocemente rispetto ai re-check di tema completo ad ogni pressione di tasto.
Aggiungi questo alle impostazioni dell'area di lavoro VS Code:
{
"themeCheck.checkOnOpen": true,
"themeCheck.checkOnChange": true,
"themeCheck.checkOnSave": true,
"themeCheck.onlySingleFileChecks": true
}
Il compromesso: perderai i controlli cross-file mentre codifichi. Lo schema consigliato è eseguire onlySingleFileChecks: true localmente per velocità, quindi eseguire il shopify theme check completo su tutto il tema in CI prima di qualsiasi push.
Confronto: CLI vs Language Server per feedback single-file
| Approccio | Ambito | Velocità | Controlli cross-file | Quando usare |
|---|---|---|---|---|
shopify theme check (nessun flag) | Tema intero (cwd) | Secondi a minuti | Sì | Porta pre-push, CI |
shopify theme check --path ./dir | Directory nominata | Uguale a sopra | Sì | Sub-temi monorepo |
VS Code + onlySingleFileChecks: true | Solo file aperti | ~10ms per cambio | No | Sviluppo attivo |
VS Code + onlySingleFileChecks: false (predefinito) | Tema intero via LSP | ~1250ms per cambio | Sì | Revisione locale pre-commit |
L'inganno --fail-level che rompe silenziosamente CI
Questo confonde quasi ogni team che configura un gate di lint per la prima volta.
Per impostazione predefinita, --fail-level è impostato a error. Questo significa che una run che trova solo avvisi esce con codice 0. Il tuo lavoro CI controlla il codice di uscita, vede 0, contrassegna il passaggio in verde, e questi avvisi si accumulano silenziosamente in dozzine di PR finché qualcuno non nota finalmente un filtro deprecato o un odore di prestazioni che è rimasto in produzione per mesi.
Risolvilo in una riga:
shopify theme check --fail-level warning
Livelli accettati, dal più al meno rigoroso:
infosuggestionstylewarningerror(predefinito)crash
Per la maggior parte dei negozi, warning è la soglia corretta. Cattura i problemi reali senza bloccare su suggerimenti puramente stilistici.
Un pattern CI di qualità produzione (GitHub Actions)
Di seguito è riportato il pattern minimo e attuale. Utilizza SHOPIFY_CLI_THEME_TOKEN per l'autenticazione non interattiva e limita il build su Theme Check prima di qualsiasi push.
name: Theme Lint and Deploy
on:
push:
branches: [main]
pull_request:
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node
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 -o json > tc-results.json
env:
SHOPIFY_FLAG_STORE: ${{ secrets.SHOPIFY_STORE }}
- name: Upload results
if: always()
uses: actions/upload-artifact@v4
with:
name: theme-check-results
path: tc-results.json
deploy:
needs: lint
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '22'
- name: Install Shopify CLI
run: npm install -g @shopify/cli @shopify/theme
- name: Push theme
run: shopify theme push --json --theme ${{ secrets.SHOPIFY_THEME_ID }}
env:
SHOPIFY_CLI_THEME_TOKEN: ${{ secrets.SHOPIFY_CLI_THEME_TOKEN }}
SHOPIFY_FLAG_STORE: ${{ secrets.SHOPIFY_STORE }}
Nota che --strict su theme push blocca solo gli errori di Theme Check, quindi passare --fail-level warning nel passaggio di controllo dedicato è il gate corretto, non affidarsi solo a --strict.
Tre altri flag che vale la pena conoscere
-a/--auto-correct: risolve le violazioni che Theme Check può risolvere senza giudizio umano (spaziatura dentro{% %}, assign inutilizzati). Esegui questo localmente, mai ciecamente in CI.--list: stampa ogni controllo abilitato e la sua gravità. Utile quando un membro del team aggiunge un.theme-check.ymle desideri verificare il set di regole attive prima di un rilascio.-C theme-check:all: abilita ogni controllo disponibile, inclusi quelli disabilitati intheme-check:recommended. Usa questo per un audit profondo periodico, non come gate quotidiano.
Cosa è cambiato in CLI 4.0 (maggio 2026) che influisce sulla tua configurazione
Se la tua pipeline ha iniziato a comportarsi stranamente dopo maggio 2026, la causa è probabilmente Shopify CLI 4.0. Due cose sono cambiate che influiscono sulle run di theme check:
- Node 22.12+ è ora richiesto. Le pipeline fissate a Node 18 o 20 falliranno al passaggio di installazione.
- L'auto-upgrade è saltato in CI. La CLI rileva gli ambienti CI e non si auto-aggiorna, che è il comportamento corretto. Ma gli install locali del progetto saltano anche l'auto-upgrade, quindi assicurati che la tua pipeline installi esplicitamente la versione che desideri.
Come bonus, theme init ora clona il tema Skeleton di Shopify per impostazione predefinita invece di Dawn. Questo non influisce sul comportamento di Theme Check, ma importa se stai scaffolding un nuovo progetto nella stessa pipeline.
Errori comuni di .theme-check.yml
Il tuo file .theme-check.yml si trova alla root tema e controlla quali controlli vengono eseguiti e con quale gravità. Alcuni pattern che causano confusione:
# Corretto: estendi da recommended, poi sovrascrivi
extend: theme-check:recommended
TemplateLength:
enabled: false
UnusedAssign:
severity: suggestion # downgrade da warning
ParserBlockingJavaScript:
enabled: true
severity: error
- Non usare
--categoryo--exclude-category. Questi flag sono stati rimossi in Theme Check 2.x. Usa invece il file YAML. - La chiave
rootè necessaria solo quando i tuoi file tema si trovano in una sottodirectory (ad es. una cartella di output build comedist/). Non ne hai bisogno per una struttura standard Dawn o Horizon.
Per un'occhiata più ampia a come Theme Check si adatta a un flusso di lavoro tema Shopify completo, vedi la mia guida alle best practice per lo sviluppo di temi Shopify e Liquid.
Se stai collegando questo a una pipeline CI/CD come parte di una migrazione più ampia o di un sistema di build, la pagina del servizio sviluppatore tema Shopify copre come affrontiamo i gate di qualità automatizzati sui progetti client.
Domande frequenti
Posso passare un singolo percorso di file a shopify theme check sulla riga di comando?
No. L'attuale Shopify CLI (Theme Check 2.x) non accetta argomenti di percorso file posizionali. Passare un percorso file come ./sections/header.liquid non è valido. Usa --path per indicare una directory, o usa il Language Server VS Code con onlySingleFileChecks abilitato per feedback per file durante lo sviluppo.
Cosa fa il flag --path in shopify theme check?
Il flag --path dice a Theme Check quale directory trattare come root tema. Per impostazione predefinita va alla directory di lavoro corrente se omesso. Non puoi usarlo per indirizzare un singolo file, deve essere una directory che contiene le tue cartelle tema (template, sezioni, snippet, ecc.).
Perché la mia pipeline CI passa anche se shopify theme check ha trovato avvisi?
Il --fail-level predefinito è error, il che significa che le run che producono solo avvisi escono con codice 0 e il tuo passaggio CI mostra verde. Passa --fail-level warning per far uscire il job con un codice diverso da zero ogni volta che viene rilevata qualsiasi violazione di avviso o peggiore.