Theme Check udah disebut di lebih dari sepuluh bab sebelumnya, tiap kali ada aturan yang nangkep kesalahan tertentu. Sekarang kita bahas alatnya sendiri: cara install, jalanin, konfigurasi, dan nyambungin ke alur kerja. Dua bab berikutnya bakal bedah semua 80 aturannya.
Theme Check itu linter buat Liquid dan JSON di theme dan theme app extension. Dia ngedeteksi error dan memaksakan praktik terbaik Liquid: syntax error, template yang hilang, variabel dan snippet yang gak dipakai, tag yang gak dikenal atau deprecated, dan masalah performa. Error tampil langsung di console atau editor, dan tiap error nyertain link ke dokumentasi check yang gagal.
Bedanya sama alat performa dari 57 Performance Dasar, Metrik, dan Cara Ngukur: Theme Check itu analisis statis, ngebaca kode tanpa ngejalaninnya, jadi bisa nangkep masalah sebelum runtime, di tiap commit. Dia gak bisa ngukur seberapa lambat, tapi bisa nunjukin pola yang pasti bikin lambat atau rusak.
Tiga Cara Pakai
- Shopify CLI:
shopify theme check, on demand, di CI, atau lewat Language Server. Butuh@shopify/clidari 05 Shopify CLI. - VS Code extension Shopify Liquid dari 07 Tools Lokal VS Code Extension, Prettier, LiquidDoc: Theme Check udah termasuk, error muncul inline waktu ngetik.
- Code editor admin dari 06 Theme Editor dan Code Editor: sejak Januari 2024, Theme Check 2.x terintegrasi di sana juga.
Buat editor lain, Theme Check tersedia lewat Language Server Shopify. Dan Theme Check open source di repo theme-tools, kamu bisa nulis check sendiri di TypeScript dan ngerujuknya di konfigurasi.
Command
shopify theme check [flags]Flag-nya (tiap flag juga punya environment variable SHOPIFY_FLAG_*):
--config <path>/-C: path ke config kustom, nimpa.theme-check.ymldi direktori yang dianalisis.--fail-level <level>: severity yang bikin run gagal (exit code 1):error,suggestion, ataustyle. Buat CI.--auto-correct/-a: perbaiki otomatis pelanggaran yang bisa diperbaiki.--init: bikin file.theme-check.ymlbaru.--output <format>/-o: format hasil,jsonatautext(default). JSON buat diproses alat lain.--print: cetak config yang aktif ke STDOUT, berguna buat debug konfigurasi bertingkat.--list/-l: daftar check yang aktif.--environment <env>/-e: environment darishopify.theme.toml(05 Shopify CLI).--version/-v: versi Theme Check.--path <path>: path direktori theme (atau subfolder,shopify theme check --path sections/buat ngecek sebagian).--verbose: log lebih detail.
Pemakaian umum:
shopify theme check
shopify theme check --path sections/
shopify theme check --auto-correct
shopify theme check --fail-level error --output jsonKonfigurasi: .theme-check.yml
Taruh .theme-check.yml di root theme buat nimpa default, atau generate pakai shopify theme check --init. Semua setting opsional:
root(string): kalau theme gak pakai struktur standar, path root tempattemplates,sections,snippetsberada. Kalau kamu generate kode darisrckedist(transformasi file dari 54 Best Practices Umum > Transformasi File), arahkan kedist.extends(string atau array): nyusun config dari config lain. Nilai ajaib:theme-check:all,theme-check:recommended,theme-check:theme-app-extension, plus file config lain atau modul pihak ketiga. Waktu banyak yang di-extend: object di-deep merge, array di-concat, yang terakhir di daftar menang.require(string atau array): import path CommonJS ke check kustom atau pihak ketiga.ignore(array): direktori/file yang dikecualikan, ndukung glob minimatch.- Setting per check (object):
enabledtrue/false,severity,ignorefile/path khusus check itu, dan opsi lain check-nya. Check kustom harus diaktifin lewat ini. Nilai default opsi ada di referensi check.
# The directory where theme folders are located (optional)
root: dist
# Configuration files are extensible
extends:
- theme-check:recommended # or theme-check:all, theme-check:theme-app-extension
- '@acme/my-custom-checks/recommended.yml'
- '../configs/.theme-check.yml'
# Paths to custom checks
require:
- ./path/to/my_custom_check.js # path to file or module
- '@acme/my-custom-checks' # for node_modules checks
# Paths to ignore (don't lint those!)
ignore:
- 'node_modules/**'
- 'snippets/*-icon.liquid' # minimatch globs are supported
# Disable a check
TemplateLength:
enabled: false
severity: warning
ignore:
- templates/index.liquid
# Configure options for a check
max_length: 300
# Enable a custom check
MyCustomCheck:
enabled: true
severity: errorSatu jebakan nama opsi: nama setting check itu camelCase. Nama yang gak dikenali (misalnya threshold_in_bytes snake_case) cuma ngelog peringatan Unexpected setting dan diabaikan, jadi check-nya jalan dengan default tanpa kamu sadar.
❌ diabaikan diam-diam
AssetSizeJavaScript:
enabled: true
threshold_in_bytes: 10000✅ camelCase
AssetSizeJavaScript:
enabled: true
thresholdInBytes: 100001. Severity
Severity nunjukin kepentingan relatif check buat fungsi dan optimasi theme: error, warning, info. Bisa diubah per check di config. Di CI, severity check yang gagal nentuin exit code: bawaannya Theme Check gagal (exit 1) kalau ada satu atau lebih masalah error, dan --fail-level ngubah ambangnya.
Config theme-check:recommended, theme-check:all, dan file dari --init nulis severity sebagai integer: error = 0, warning = 1, info = 2. Dua bentuk setara, tapi string lebih disukai karena lebih terbaca.
2. Nonaktifin Lewat Komentar Liquid
Buat pengecualian lokal tanpa nyentuh config, pakai komentar inline {% # ... %} dari 10 Tags Variabel dan Percabangan:
{% # theme-check-disable %}
{% assign x = 1 %}
{% # theme-check-enable %}Semua check buat baris berikutnya:
{% # theme-check-disable-next-line %}
{% assign x = 1 %}Check tertentu buat satu bagian:
{% # theme-check-disable UnusedAssign %}
{% assign x = 1 %}
{% # theme-check-enable UnusedAssign %}Check tertentu buat baris berikutnya:
{% # theme-check-disable-next-line UnusedAssign %}
{% assign x = 1 %}Banyak check dipisah koma, buat bagian maupun baris berikutnya:
{% # theme-check-disable UnusedAssign, UndefinedObject %}
{% assign x = 1 %}
{% echo y %}
{% # theme-check-enable UnusedAssign, UndefinedObject %}{% # theme-check-disable-next-line UnusedAssign, UndefinedObject %}
{% assign x = y %}Buat seluruh dokumen, taruh komentar disable di baris pertama tanpa enable:
{% # theme-check-disable UnusedAssign %}
{% assign x = 1 %}Praktik yang disaranin: tiap disable dikasih alasan di komentar sebelahnya, biar orang berikutnya (termasuk kamu) tau kenapa pengecualiannya ada.
Check Performa
Dari sudut pandang performa, Theme Check nangkep masalah yang ngaruh ke semua Core Web Vitals, dan sebagian udah dibahas di bab 59–64:
ParserBlockingScript: script tanpadefer/async(61 Performance JavaScript dan INP).RemoteAsset: aset dari domain eksternal, self-host lewatasset_url(64 Performance Navigasi dan Loading).CdnPreconnect: preconnect redundan ke CDN Shopify yang platform udah kirim.ImgWidthAndHeight:imgtanpawidth/heightyang bikin layout shift (59 Performance Gambar dan LCP).PaginationSize: ukuran paginasi dalam rentang performan, defaultmaxSize: 250(58 Performance Liquid).AssetPreload: dorong filter Liquid (stylesheet_tag: preload: true) daripada tag HTML, biar dapat Early Hints.AssetSizeCSSdanAssetSizeJavaScript: file aset yang melebihi ambang, default 100.000 byte CSS dan 10.000 byte JavaScript. Keduanya ngukur ukuran mentah di disk (atauContent-Lengthaset remote), bukan minified/terkompresi, walaupun pesannya nyebut kompresi.
Dua yang terakhir bukan bagian theme-check:recommended, jadi gak jalan kecuali kamu aktifin. Mereka dihilangkan dari recommended, bukan di-set enabled: false, jadi nambahinnya ke .theme-check.yml yang ngaktifin:
AssetSizeCSS:
enabled: true
thresholdInBytes: 100000
AssetSizeJavaScript:
enabled: true
thresholdInBytes: 10000
PaginationSize:
enabled: true
maxSize: 250Dan ingat dari 63 Performance Apps dan Pihak Ketiga: Theme Check gak bisa ngedeteksi manipulasi metrik atau nalar soal script yang ngakalin pengukuran, cuma pola yang dikenal.
Auto-correct
--auto-correct memperbaiki yang bisa diperbaiki secara mekanis: penggantian filter deprecated, file template yang hilang, object layout yang wajib (content_for_header/content_for_layout), dan sebagian syntax. Di tabel referensi, check yang ndukung ini ditandai “Yes” di kolom auto-correction: DeprecatedFilter, MissingTemplate, RequiredLayoutThemeObject, MatchingTranslations. Masalah performa, arsitektur, dan logika bisnis harus diperbaiki manual. Jalankan auto-correct sebelum commit, dan review diff-nya, karena “bisa diperbaiki otomatis” bukan berarti “pasti yang kamu mau”.
Alur Kerja
Theme Check itu garis pertahanan pertama, alat berbasis browser lapisan berikutnya:
- Saat development: jalankan sering, atau biarin VS Code extension nampilin inline.
- Sebelum commit: bersihin semua error dengan
shopify theme check --auto-correct. - Di CI/CD: blokir merge yang punya error,
- run: shopify theme checkdengan--fail-levelsesuai kebijakan tim. Ini pasangan Lighthouse CI dari 68 Theme Inspector dan Lighthouse CI. - Dengan alat lain: Lighthouse, WebPageTest, Theme Inspector buat analisis lebih dalam.
Pembagian perannya: Theme Check = analisis statis, nangkep error sebelum runtime, tiap commit. Theme Inspector = profil render Liquid nyata, waktu TTFB lambat. Lighthouse = metrik lab keseluruhan, sebelum launch dan audit berkala. WebPageTest = performa nyata dan waterfall, debug detail. Semuanya saling melengkapi, Theme Check duluan.
Migrasi dari Theme Check 1.x ke 2.x
Januari 2024, Theme Check 2.x diintegrasiin ke code editor admin, VS Code extension, dan CLI. Kalau kamu punya config atau alur kerja dari 1.x, ini yang berubah:
1. CLI
Dukungan kategori check dihapus: flag --category dan --exclude-category gak ada lagi. Alasannya nyederhanain API dan ngurangin noise --help. Kalau kamu butuh subset (misalnya cuma check performa), bikin config terpisah dan pakai kemampuan extends yang baru.
2. Konfigurasi
extends sekarang ndukung theme-check:all, theme-check:recommended, theme-check:theme-app-extension, plus daftar file config dan modul pihak ketiga. require gak ndukung check Ruby kustom lagi (Theme Check 1.x ditulis Ruby, 2.x TypeScript). Check kustom ditulis ulang di TypeScript ngikutin panduan “Creating your own checks” di repo theme-tools.
3. Tabel Kompatibilitas Check
Yang penting buat nulis ulang .theme-check.yml:
- Digabung:
AssetSizeCSSStylesheetTag→AssetSizeCSS;ConvertIncludeToRenderdanDeprecatedTags→DeprecatedTag;HtmlParsingErrordanSyntaxError→LiquidHTMLSyntaxError;MatchingSchemaTranslationsdanMatchingTranslations→MatchingTranslations;ParserBlockingJavaScriptdanParserBlockingScriptTag→ParserBlockingScript;ValidJson→JSONSyntaxError. - Diganti nama:
AssetUrlFilters→RemoteAsset. - Dihapus (gak ada padanan di 2.x):
DefaultLocale,DeprecatedGlobalAppBlockType,ImgLazyLoading,LiquidTag,MissingEnableComment,MissingRequiredTemplateFiles,NestedSnippet,RequiredDirectories,SchemaJsonFormat,SpaceInsideBraces,TemplateLength,UnusedSnippet(digantiOrphanedSnippet). - Baru di 2.x:
BlockIdUsage,DeprecatedFontsOnSectionsAndBlocks,DeprecatedFontsOnSettingsSchema,DuplicateContentForArguments,DuplicateRenderSnippetArguments,EmptyBlockContent,HardcodedRoutes,JSONMissingBlock,LiquidFreeSettings,MissingContentForArguments,MissingRenderSnippetArguments,OrphanedSnippet,SchemaPresetsBlockOrder,SchemaPresetsStaticBlocks,UnclosedHTMLElement,UniqueDocParamNames,UniqueStaticBlockId,UnrecognizedContentForArguments,UnrecognizedRenderSnippetArguments,UnsupportedDocTag,UnusedDocParam,ValidBlockTarget,ValidContentForArguments,ValidDocParamTypes,ValidLocalBlocks,ValidContentForArgumentTypes,ValidRenderSnippetArgumentTypes,ValidSchemaName,ValidSettingsKey,ValidStaticBlockType. - Tetap sama:
AppBlockValidTags,AssetPreload,AssetSizeAppBlockCSS,AssetSizeAppBlockJavaScript,AssetSizeCSS,AssetSizeJavaScript,CdnPreconnect,ContentForHeaderModification,DeprecateBgsizes,DeprecatedFilter,DeprecateLazysizes,ImgWidthAndHeight,MissingAsset,MissingTemplate,PaginationSize,RemoteAsset,RequiredLayoutThemeObject,TranslationKeyExists,UndefinedObject,UnknownFilter,UnusedAssign,ValidHTMLTranslation,ValidSchema.
Perhatiin arah perkembangannya: hampir semua check baru soal theme block, content_for, LiquidDoc, dan schema dari 28 Blocks, 29 Theme Blocks Mendalam, dan 07 Tools Lokal VS Code Extension, Prettier, LiquidDoc. Theme Check 2.x dibangun buat arsitektur theme generasi sekarang.
Halaman referensi buat check 1.x yang dihapus (default-locale, img-lazy-loading, liquid-tag, missing-enable-comment, missing-required-template-files, nested-snippet, required-directories, schema-json-format, space-inside-braces, template-length, unused-snippet, matching-schema-translations, deprecated-global-app-block-type) masih ada di dokumentasi, dan bakal kita sebut singkat di dua bab berikutnya biar lengkap.
Ringkasan
- Theme Check = linter statis Liquid dan JSON buat theme dan theme app extension: syntax, template hilang, variabel/snippet tak terpakai, tag deprecated, performa; error dengan link dokumentasi.
- Tiga jalur: CLI (
shopify theme check), VS Code extension (inline), code editor admin (2.x sejak Januari 2024), plus Language Server buat editor lain dan check kustom TypeScript. - Flag:
--config,--fail-level(error/suggestion/style),--auto-correct,--init,--output json|text,--print,--list,--environment,--path,--verbose. .theme-check.yml:root,extends(theme-check:all|recommended|theme-app-extension+ file/modul, deep merge, terakhir menang),require,ignore(glob), setting per check (enabled,severity,ignore, opsi camelCase, nama salah diabaikan diam-diam).- Severity
error/warning/info(= 0/1/2), gagal dierrorsecara default,--fail-levelbuat CI. - Komentar
{% # theme-check-disable[-next-line] [Check1, Check2] %}…{% # theme-check-enable %}, di baris pertama buat seluruh file. - Check performa:
ParserBlockingScript,RemoteAsset,CdnPreconnect,ImgWidthAndHeight,PaginationSize(250),AssetPreload, dan opt-inAssetSizeCSS(100.000) /AssetSizeJavaScript(10.000) yang ngukur byte mentah. - Auto-correct buat filter deprecated, template hilang, object layout wajib,
MatchingTranslations; sisanya manual. - Alur: development →
--auto-correctsebelum commit → CI dengan--fail-level→ Lighthouse/WebPageTest/Theme Inspector. - 2.x: tanpa
--category,extendsfleksibel, tanpa check Ruby, banyak check digabung/diganti nama/dihapus/ditambah (mayoritas soal theme block,content_for, LiquidDoc).
Bab selanjutnya kita mulai referensi aturan satu per satu: dari AppBlockMissingSchema sampai LiquidTag, dengan apa yang dicek, kenapa penting, contoh salah dan benar, opsi, dan kapan boleh dinonaktifin.