האצת בדיקות Pre-commit פי 10
הגדרת lint-staged לבדיקות קוד מהירות לפני commit היא בקשה נפוצה מצד צוותים המשתמשים ב-React 18 עם TypeScript, כאשר כל commit מפעיל את ESLint על כל 500+ הקבצים ולוקח 30 שניות של המתנה. מפתחים מתחילים להשתמש ב-git commit --no-verify כדי להימנע מההמתנה. איכות הקוד יורדת, באגים מחליקים לייצור. הפתרון הוא lint-staged. הוא מריץ לינטרים ופורמטרים רק על קבצים שנמצאים באזור ה-staging. הצוות שלנו מגדיר pipelines כאלה תוך 30–60 דקות, ובדיקת שלושה קבצים שהשתנו לוקחת פחות משנייה. זה מאיץ את בדיקות ה-pre-commit פי 10–30, והצוות מתחיל לסמוך שוב על ה-hooks. זה חוסך עד 20 שעות בחודש בהמתנה ללינטרים — בעצם מחזיר יום עבודה אחד לצוות. בתעריף ממוצע של $50 לשעה למפתח, זה חיסכון של $1,000 עד $5,000 בחודש לצוות של 5 אנשים.
התיעוד של lint-staged ממליץ: "הרץ לינטרים על קבצי git staged ואל תיתן ל💩 להחליק לתוך בסיס הקוד שלך!"
למה lint-staged עובד מהר יותר
| גישה | זמן לכל commit (500 קבצים) | קבצים שנבדקו | הסתברות לעקיפה |
|---|---|---|---|
| סקריפט רגיל (כל הקבצים) | ~30 שניות | הכל | גבוהה (--no-verify) |
| lint-staged (רק staged) | <1 שנייה | רק קבצים שהשתנו | נמוכה |
| פורמט ידני | לא רלוונטי | לא רלוונטי | גבוהה מאוד |
איך אנחנו מגדירים lint-staged
אנחנו משתמשים ב-lint-staged 15.x, Husky 9.x, ESLint 9.x, Prettier 3.x. התצורה נשמרת ב-lint-staged.config.mjs — זה יותר נוח מ-package.json ומאפשר פונקציות דינמיות. מקרה טיפוסי: פרויקט React 18 + TypeScript. החלק הלא מובן מאליו היחיד הוא typecheck.
הגדרת typecheck בתוך lint-staged
התקנה:
npm install --save-dev lint-staged בדרך כלל יחד עם Husky. npm install --save-dev lint-staged :
npx lint-staged תצורה:
export default {
'**/*.{ts,tsx,js,jsx}': [
'eslint --fix --max-warnings 0',
'prettier --write',
],
'**/*.{css,scss}': [
'stylelint --fix',
'prettier --write',
],
'**/*.{json,md,yml,yaml}': [
'prettier --write',
],
'**/*.{ts,tsx}': [
'eslint --fix',
'prettier --write',
() => 'node scripts/typecheck-staged.mjs',
],
};
דוגמה לפונקציית wrapper ל-typecheck
// scripts/typecheck-staged.mjs
import { execSync } from 'node:child_process';
try {
execSync('tsc --noEmit --incremental', { stdio: 'inherit' });
} catch {
process.exit(1);
} ניפוי באגים
# Посмотреть, что будет запущено без реального запуска npx lint-staged --debug --dry-run מה כלול בהתקנה
אנחנו מתעדים את רצף העבודה בבריף ושומרים אותו במאגר ה-Git של הלקוח:
- ביקורת על ה-pipeline הנוכחי: מדידת זמן pre-commit, זיהוי צווארי בקבוק וספירת תדירות
.husky/pre-commit. - בחירת כלים למחסנית הטכנולוגית: ESLint, Prettier, Stylelint, tsc, בדיקות סודות מותאמות אישית.
- פיתוח תצורת lint-staged ו-Husky: globs ספציפיים, סדר פקודות, טיפול בשגיאות.
- שילוב wrapper ל-typecheck ובדיקת עשן ב-CI: ה-pipeline נכשל אם ה-hook לא רץ.
- העברת ידע לצוות: סדנה של 30 דקות ו-changelog של 5–7 עמודים ב-Confluence.
| שלב | תיאור |
|---|---|
| ניתוח התהליך הנוכחי | לימוד הפרויקט, המחסנית וה-pipeline שלך |
| התקנה ותצורה | הגדרת lint-staged, Husky, ESLint, Prettier, Stylelint |
| שילוב typecheck | כתיבת פונקציית wrapper ל-tsc |
| בדיקות מותאמות אישית | גודל קבצים, סודות וכו' |
| תיעוד והדרכה | תיאור התהליך לצוות |
| תמיכה לאחר היישום | השבועות הראשונים, התאמות לפי בקשה |
ציר זמן ותקציב
הערכת הפרויקט לוקחת יום עבודה אחד. ההתקנה בפועל אורכת 2 עד 5 ימים בהתאם למורכבות. העלות מחושבת באופן אישי לפי מספר הכלים, הצורך בבדיקות מותאמות אישית ושילוב CI/CD. צור קשר להערכה מפורטת.
למה לבחור בנו
אנחנו מבטיחים איכות: למעלה מ-10 שנות ניסיון ו-100+ פריסות של pipelines לאיכות קוד. אנחנו לא רק מגדירים כלים; אנחנו משלבים אותם ב-CI/CD שלך, תוך התחשבות במאפייני התשתית. המהנדסים שלנו יודעים איך lint-staged מתקשר עם hooks ו-pipelines אחרים. הזמינו הגדרת lint-staged מהצוות שלנו — האצו את בדיקות ה-pre-commit פי 10 והחזירו זמן פיתוח אמיתי לצוות שלכם.
אנחנו שמים דגש מיוחד על תצורות monorepo: Nx, Turborepo ו-Yarn Workspaces דורשות הרכבה זהירה של תצורה — אחרת לינטרים משכפלים עבודה ו-typecheck נכשל בלולאות. בפרויקטים כאלה, אנחנו מפצלים חוקים לפי חבילה: קוד ספרייה נבדק דרך npx lint-staged , יישומים דרך tsc legacy עם export default { '**/*.{ts,tsx,js,jsx}': [ 'eslint --fix --max-warnings 0', 'prettier --write', ], '**/*.{css,scss}': [ 'stylelint --fix', 'prettier --write', ], '**/*.{json,md,yml,yaml}': [ 'prettier --write', ], '**/*.{ts,tsx}': [ 'eslint --fix', 'prettier --write', () => 'node scripts/typecheck-staged.mjs', ], }; . בנוסף, אנחנו מאפשרים ESLint אינקרמנטלי ו-caches של Prettier דרך אפשרות // scripts/typecheck-staged.mjs import { execSync } from 'node:child_process'; try { execSync('tsc --noEmit --incremental', { stdio: 'inherit' }); } catch { process.exit(1); } , מה שמפחית את הזמן ב-40–60% ב-commits חוזרים. לצוותים עם 20+ מפתחים, אנחנו מוסיפים skip-worktree לקבצי תצורה כך שהגדרות IDE מקומיות לא ידלפו ל-PRs.
לאחר הפריסה, אנחנו מבצעים שתי מדידות רטרוספקטיביות — אחרי שבוע ואחרי חודש. הראשונה מראה באיזו תדירות מפתחים התרחקו מ-# Посмотреть, что будет запущено без реального запуска npx lint-staged --debug --dry-run (בדרך כלל מ-45% ל-3–5%), השנייה מראה זמן אמיתי שנחסך: 12–20 שעות לצוות בחודש. כל המדדים מתועדים בלוח מחוונים של Grafana אם כבר פרוס, או בגיליון Google של 25–30 שורות. צור קשר להערכת פרויקט חינמית — בדרך כלל תשובה ראשונה תוך 4 שעות עסקים.







