Husky dan lint-staged dengan Claude Code
Pelajari tentang Husky dan lint-staged menggunakan Claude Code. Dilengkapi tips praktis dan contoh kode.
Jaminan Kualitas Kode Otomatis dengan Git Hook
Husky adalah tools untuk mengelola Git hook dengan mudah, dan lint-staged adalah tools yang menjalankan lint dan format hanya pada file yang di-stage. Dengan menggabungkan keduanya, kamu bisa secara otomatis mengecek kualitas kode sebelum commit dan mencegah kode bermasalah masuk ke repository.
Setup
Mari minta Claude Code untuk melakukan setup.
> Setup Husky + lint-staged.
> Sertakan pengecekan ESLint, Prettier, type check, dan test sebelum commit.
# Instal package
npm install -D husky lint-staged
# Inisialisasi Husky
npx husky init
// .husky/pre-commit
npx lint-staged
// package.json
{
"lint-staged": {
"*.{ts,tsx}": [
"eslint --fix --max-warnings 0",
"prettier --write"
],
"*.{js,jsx,mjs,cjs}": [
"eslint --fix",
"prettier --write"
],
"*.{json,md,yml,yaml}": [
"prettier --write"
],
"*.css": [
"prettier --write"
]
}
}
Menambahkan Type Check
Hook untuk mengecek type error yang terpengaruh oleh file yang di-stage.
// .husky/pre-commit
#!/usr/bin/env sh
// lint-staged (ESLint + Prettier)
npx lint-staged
// TypeScript type check (seluruh proyek)
npx tsc --noEmit --pretty
Type check tidak bermakna jika dilakukan per file, jadi dijalankan untuk seluruh proyek. Untuk proyek berskala besar yang memakan waktu, bisa juga menyerahkannya ke CI.
Validasi Commit Message
Hook untuk mewajibkan commit message yang sesuai conventional commits.
# Instal commitlint
npm install -D @commitlint/cli @commitlint/config-conventional
// commitlint.config.mjs
export default {
extends: ["@commitlint/config-conventional"],
rules: {
"type-enum": [
2,
"always",
[
"feat",
"fix",
"docs",
"style",
"refactor",
"perf",
"test",
"build",
"ci",
"chore",
"revert",
],
],
"subject-max-length": [2, "always", 72],
"body-max-line-length": [2, "always", 100],
},
};
// .husky/commit-msg
npx --no -- commitlint --edit ${1}
Konfigurasi lint-staged Lanjutan
Konfigurasi untuk menjalankan proses yang berbeda sesuai pola file.
// lint-staged.config.mjs
export default {
// File TypeScript/JSX
"*.{ts,tsx}": (filenames) => {
const files = filenames.join(" ");
return [
`eslint --fix --max-warnings 0 ${files}`,
`prettier --write ${files}`,
// Jalankan test terkait file yang diubah
`vitest related --run ${files}`,
];
},
// File style
"*.{css,scss}": ["prettier --write"],
// Skema Prisma
"prisma/schema.prisma": () => [
"npx prisma format",
"npx prisma validate",
],
// File package
"package.json": ["npx sort-package-json"],
};
Pengecekan Sebelum Push
Hook untuk menjalankan build dan test sebelum push.
// .husky/pre-push
#!/usr/bin/env sh
echo "Menjalankan pengecekan sebelum push..."
// Pengecekan build
npm run build
// Menjalankan test
npm run test:ci
echo "Semua pengecekan berhasil"
Integrasi dengan CI/CD
Konfigurasi untuk menyelaraskan hook lokal dan pengecekan CI.
// package.json
{
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint --fix .",
"format": "prettier --write .",
"format:check": "prettier --check .",
"typecheck": "tsc --noEmit",
"test": "vitest",
"test:ci": "vitest run --coverage",
"validate": "npm run typecheck && npm run lint && npm run format:check && npm run test:ci",
"prepare": "husky"
}
}
Troubleshooting
Masalah umum dan solusinya.
# Jika hook tidak berjalan
chmod +x .husky/pre-commit
chmod +x .husky/commit-msg
# Periksa path git hooks
git config core.hooksPath
# Debug lint-staged
npx lint-staged --debug
# Skip hook sementara (hanya untuk darurat)
git commit --no-verify -m "hotfix: perbaikan darurat"
// Penanganan masalah line ending di Windows
// .gitattributes
// * text=auto eol=lf
// *.{cmd,bat} text eol=crlf
Poin Penerapan di Tim
- Terapkan secara bertahap - Mulai dengan Prettier saja, lalu ESLint, terakhir type check
- Selaraskan dengan CI - Jalankan pengecekan yang sama di hook lokal dan CI
- Perhatikan performa - Pengecekan berat diserahkan ke CI agar commit tidak terlalu lambat
- Dokumentasikan - Bagikan prosedur setup dan aturan penggunaan
--no-verify
Ringkasan
Kombinasi Husky + lint-staged adalah mekanisme dasar namun efektif untuk menjamin kualitas kode secara otomatis. Dengan memanfaatkan Claude Code, mulai dari setup, pembuatan custom hook, hingga troubleshooting bisa ditangani secara efisien.
Untuk konfigurasi ESLint, lihat Panduan Optimasi Konfigurasi ESLint, dan untuk konfigurasi Prettier, lihat Panduan Kustomisasi Konfigurasi Prettier. Pastikan juga mengecek Dokumentasi Resmi Husky.
PDF Gratis: Cheatsheet Claude Code dalam 5 Menit
Cukup masukkan emailmu dan kami akan langsung mengirim cheatsheet PDF A4 satu halaman.
Kami menjaga data pribadimu dengan aman dan tidak pernah mengirim spam.
Tentang Penulis
Masa
Engineer yang aktif menggunakan Claude Code. Mengelola claudecode-lab.com, media teknologi 10 bahasa dengan lebih dari 2.000 halaman.
Artikel Terkait
7 template CLAUDE.md untuk Claude Code yang bisa langsung dipakai di proyek nyata
Tujuh template CLAUDE.md praktis untuk app solo, situs konten, API, repo tim, dan codebase legacy, plus kegagalan yang perlu dihindari.
Panduan Approval dan Sandbox Claude Code | Pengaturan aman untuk kerja harian
Cara membagi aksi Claude Code ke allow, ask, deny, dan sandbox dengan settings praktis, hooks, dan contoh workflow nyata.
Panduan Lengkap Memulai Claude Code 2026 | 7 Langkah dari Nol hingga Siap Pakai di Dunia Kerja
Panduan pemula lengkap untuk pengguna baru Claude Code. Dari instalasi hingga mengintegrasikannya ke workflow pengembangan nyata — mencakup semua jebakan yang Masa hadapi di awal.