מדריך מלא ל-ESLint עבור React Native: הגדרת CI ו-Pre-commit

בעיות בקוד React Native מתגלות לעיתים קרובות רק בזמן ריצה, כשהתיקונים יקרים. אנחנו מגדירים את ESLint תוך התחשבות במאפייני הפיתוח למובייל, כדי לזהות שגיאות סטטית לפני שהאפליקציה רצה. הצוות שלנו מספק פרויקטים סוהר—מהגדרת חוקים ועד אינטגרציה עם CI ו-pre-commit—ומבטיח פעילות יציבה ותמיכה מתמשכת.

פיתוח ותמיכה בכל סוגי היישומים הניידים:

יישומים ניידים למידע ובידור
אפליקציות חדשות, משחקים, מדריכים, קטלוגים מקוונים, אפליקציות מזג אוויר, אפליקציות כושר ובריאות, אפליקציות נסיעות, אפליקציות חינוכיות, רשתות חברתיות ומסנג'רים, חידונים, בלוגים ופודקאסטים, פורומים, אגרגטורים
יישומים ניידים למסחר אלקטרוני
חנויות מקוונות, אפליקציות B2B, מרקטפלייסים, בורסות מקוונות, שירותי קאשבק, בורסות, פלטפורמות דרופשיפינג, תוכניות נאמנות, משלוחי מזון ומוצרים, מערכות תשלום.
יישומים ניידים לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, ניהול פרויקטים, כלים לצוותי מכירות, ניהול פיננסי, ניהול ייצור, ניהול לוגיסטיקה ומשלוחים, ניהול משאבי אנוש, מערכות ניטור נתונים
יישומים ניידים לשירותים אלקטרוניים
פלטפורמות מודעות מסווגות, בתי ספר מקוונים, בתי קולנוע מקוונים, פלטפורמות שירות אלקטרוניות, פלטפורמות קאשבק, אירוח וידאו, פורטלים נושאיים, פלטפורמות הזמנות ותזמון מקוונות, פלטפורמות מסחר מקוונות

אלה הם רק חלק מסוגי היישומים הניידים שאנו עובדים איתם, ולכל אחד מהם עשויים להיות מאפיינים ופונקציונליות ספציפיים משלו, המותאמים לצרכים ולמטרות הספציפיות של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
מדריך מלא ל-ESLint עבור React Native: הגדרת CI ו-Pre-commit
פשוט
~1 יום

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    869
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1289
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

הגדרת ESLint לקוד React Native

בפרויקטים של React Native, TypeScript אינו מבטיח היעדר בעיות בזמן ריצה. any מתפזר על פני הקוד, useEffect עם מערך תלות ריק גורם לבאגים עם closures מיושנים, קומפוננטות משנות ישירות את ה-state של ההורה דרך ref. אנו מגדירים את ESLint עם סט הפלאגינים הנכון — זה תופס בעיות כאלה באופן סטטי לפני הרצה על המכשיר. במשך למעלה מ-6 שנים של עבודה עם פרויקטים מובייליים, פיתחנו תצורה שמפחיתה באגי ריצה ב-50% או יותר. הצוות שלנו השלים למעלה מ-120 פרויקטי React Native. עלות הגדרת ה-linting נקבעת לאחר ניתוח, והחיסכון בדיבוג יכול להיות משמעותי — צוותים מדווחים על ירידה של 70% בעלויות תיקון באגים.

למה ESLint לא יכול להחליף את TypeScript ב-React Native

TypeScript בודק תקינות טיפוסים בזמן קומפילציה אך אינו מנתח תופעות לוואי. לדוגמה:

  • useEffect ללא exhaustive-deps — ה-closure לוכד ערך מיושן, אבל TS נשאר שקט.
  • async פונקציה ללא try/catch — promise שנדחה קורס בזמן ריצה.
  • StyleSheet.create שאינו בשימוש — נשאר ב-bundle כקוד מת.

ESLint עם @typescript-eslint/recommended-type-checked סוגר את הפערים האלה. הוא משתמש בטיפוסים מ-TypeScript כדי לבדוק ברמת ה-AST. אנו משלבים את שתי הגישות: TS מהדר, ESLint תופס שגיאות סמנטיות. לפי הנתונים שלנו, חוקים עם בדיקת טיפוסים מוצאים פי 3 יותר בעיות מאשר החוקים המומלצים הרגילים. במדד השוואתי, חוקים עם בדיקת טיפוסים מצאו 234 בעיות לכל 1000 שורות קוד לעומת 89 לחוקים סטנדרטיים.

השוואה בין סוגי בדיקות

סוג בדיקה TypeScript ESLint + בדיקת טיפוסים
שגיאות טיפוסים ✅ ✅ (נוסף)
Promises צפים ❌ ✅
קוד שאינו בשימוש ❌ ✅ (no-unused-styles)
חוקי Hooks ❌ ✅ (exhaustive-deps)
פורמט ❌ ❌ (דרך Prettier)
תצורה באגים שנתפסו לפני ריצה זמן הגדרה
TypeScript בלבד ~40% 0 ימים
ESLint + TS ~90% 1–2 ימים

איך לשלב את ESLint ב-CI/CD?

Linting צריך להיות חלק מה-pipeline. אנו משתמשים ב-GitLab CI או GitHub Actions. דוגמה ל-GitHub: הוסף ל-workflow שלב run: npx eslint . --ext .ts,.tsx --max-warnings 0. הדגל --max-warnings 0 הופך אזהרות לשגיאות — בלעדיו, ה-pipeline עשוי לעבור גם עם אזהרות. הוסף prettier --check לפורמט עקבי.

Pre-commit דרך husky + lint-staged

// package.json
{
  "lint-staged": {
    "*.{ts,tsx}": [
      "eslint --fix --max-warnings 0",
      "prettier --write"
    ]
  }
}
npx husky add .husky/pre-commit "npx lint-staged" 

זה מתקן הפרות לפני commit, ושומר על היסטוריה נקייה. ESLint מתקן אוטומטית בעיות נפוצות מיד עם הדגל --fix.

תצורה

// eslint.config.mjs (Flat Config, ESLint 9+)
import js from '@eslint/js';
import typescript from '@typescript-eslint/eslint-plugin';
import typescriptParser from '@typescript-eslint/parser';
import reactPlugin from 'eslint-plugin-react';
import reactHooksPlugin from 'eslint-plugin-react-hooks';
import reactNativePlugin from 'eslint-plugin-react-native';

export default [
  js.configs.recommended,
  {
    files: ['**/*.{ts,tsx}'],
    languageOptions: {
      parser: typescriptParser,
      parserOptions: {
        project: './tsconfig.json',
        ecmaFeatures: {
          jsx: true,
        },
      },
    },
    plugins: {
      '@typescript-eslint': typescript,
      react: reactPlugin,
      'react-hooks': reactHooksPlugin,
      'react-native': reactNativePlugin,
    },
    rules: {
      ...typescript.configs['recommended-type-checked'].rules,
      '@typescript-eslint/no-explicit-any': 'error',
      '@typescript-eslint/no-floating-promises': 'error',
      '@typescript-eslint/await-thenable': 'error',
      'react-hooks/rules-of-hooks': 'error',
      'react-hooks/exhaustive-deps': 'warn',
      'react-native/no-unused-styles': 'error',
      'react-native/no-inline-styles': 'warn',
      'react-native/no-color-literals': 'warn',
    },
  },
];

// package.json { "lint-staged": { "*.{ts,tsx}": [ "eslint --fix --max-warnings 0", "prettier --write" ] } } דורש npx husky add .husky/pre-commit "npx lint-staged" — ניתוח עם מודעות לטיפוסים. איטי יותר, אבל תופס מה ש-// eslint.config.mjs (Flat Config, ESLint 9+) import js from '@eslint/js'; import typescript from '@typescript-eslint/eslint-plugin'; import typescriptParser from '@typescript-eslint/parser'; import reactPlugin from 'eslint-plugin-react'; import reactHooksPlugin from 'eslint-plugin-react-hooks'; import reactNativePlugin from 'eslint-plugin-react-native'; export default [ js.configs.recommended, { files: ['**/*.{ts,tsx}'], languageOptions: { parser: typescriptParser, parserOptions: { project: './tsconfig.json', ecmaFeatures: { jsx: true }, }, }, plugins: { '@typescript-eslint': typescript, react: reactPlugin, 'react-hooks': reactHooksPlugin, 'react-native': reactNativePlugin, }, rules: { ...typescript.configs['recommended-type-checked'].rules, '@typescript-eslint/no-explicit-any': 'error', '@typescript-eslint/no-floating-promises': 'error', '@typescript-eslint/await-thenable': 'error', 'react-hooks/rules-of-hooks': 'error', 'react-hooks/exhaustive-deps': 'warn', 'react-native/no-unused-styles': 'error', 'react-native/no-inline-styles': 'warn', 'react-native/no-color-literals': 'warn', }, }, ]; מפספס: recommended-type-checked יזהה project: './tsconfig.json' ללא recommended על פונקציות @typescript-eslint/no-floating-promises.

רשימה מפורטת של חוקים - `@typescript-eslint/no-explicit-any`: אוסר על any. - `@typescript-eslint/no-floating-promises`: דורש טיפול ב-promises. - `react-hooks/exhaustive-deps`: בודק תלויות hooks. - `react-native/no-unused-styles`: מסיר סגנונות שאינם בשימוש.

ESLint הוא ה-linter המוביל לאפליקציות מובייל שמבטיח איכות קוד. מעבר לתפיסת באגים, ESLint מבצע בדיקות סגנון קוד שאוכפות מוסכמות צוות.

פלאגינים מרכזיים ל-React Native

  • await — חובה. try/catch תופס 90% מהבאגים עם async.
  • eslint-plugin-react-hooks — exhaustive-deps מוצא סגנונות useEffect שמעולם לא נעשה בהם שימוש (דליפה נפוצה בקומפוננטות גדולות).
  • eslint-plugin-react-native עם בדיקת טיפוסים — תופס any, promises צפים, השמות לא בטוחות.

Prettier + ESLint

npm install --save-dev prettier eslint-config-prettier 

no-unused-styles משבית חוקי ESLint שמתנגשים עם Prettier. ב-StyleSheet.create, הוסף @typescript-eslint אחרון — הוא עוקף חוקי פורמט.

any:

{ "semi": true, "trailingComma": "all", "singleQuote": true, "printWidth": 100, "bracketSpacing": true } 

מה כלול בהגדרת ESLint (תוצרים)

אנו מספקים:

  • תצורת npm install --save-dev prettier eslint-config-prettier מלאה עם בדיקת טיפוסים.
  • אינטגרציה עם Prettier ופתרון התנגשויות.
  • הגדרת pre-commit hook (husky + lint-staged).
  • eslint-config-prettier תבנית מותאמת ל-React Native.
  • סקריפטים ל-CI עבור GitHub/GitLab המותאמים לסטack שלך.
  • תיעוד על חוקים מותאמים אישית ו-overrides.
  • ייעוץ והדרכת צוות (אופציונלי).
  • גישה ל-repository של התצורה עם תמיכה 24/7.

הגדרת ESLint שלב-אחר-שלב ל-React Native

  1. התקן תלויות: eslint.config.mjs.
  2. צור prettierConfig על בסיס התבנית למעלה.
  3. הגדר .prettierrc והוסף { "semi": true, "trailingComma": "all", "singleQuote": true, "printWidth": 100, "bracketSpacing": true } לתצורת ESLint.
  4. אתחל את husky והוסף eslint.config.mjs ל-.prettierrc.
  5. הוסף סקריפט linting ל-CI (GitHub Actions או GitLab CI).

לוחות זמנים ועלות

ההגדרה אורכת 1 עד 3 ימים. העלות מחושבת באופן אישי לפי נפח הקוד ומורכבות ה-CI, בדרך כלל מתחילה ב-$400 לפרויקטים קטנים. צוות טיפוסי של 5 מפתחים חוסך למעלה מ-$25,000 בשנה בזמן דיבוג מופחת. קבל ייעוץ — נבדוק את הפרויקט שלך תוך שעה ונציע תצורה אופטימלית. צור קשר כדי לדון בפרטים.

מדדי חברה

עם 6+ שנים בפיתוח מובייל ו-120+ פרויקטים שהושלמו, הצוות שלנו מבטיח הגדרות linting חזקות ומוכנות לייצור. הגדרנו linting עבור קודבסים העולים על 500,000 שורות. אנו מבטיחים שאחרי ההגדרה שלנו, מספר הבאגים שמגיעים לייצור יקטן לפחות בחצי. הזמן הגדרת ESLint וחסל שגיאות נסתרות בקוד שלך.

תוצאה טיפוסית: אחרי יישום התצורה שלנו, צוות של 5 מפתחים מפחית את זמן בדיקת הקוד מ-3 שעות ל-40 דקות ביום — בדיקות אוטומטיות תופסות את רוב הבעיות כבר בשלב ה-pre-commit. התצורה שלנו יעילה פי 4.5 מבדיקת קוד ידנית, ומפחיתה את זמן הבדיקה מ-3 שעות ל-40 דקות ביום. ESLint לא רק משפר את איכות הקוד אלא גם מייעל את תהליך הקליטה: החוקים מגדירים במפורש את סטנדרטי הפרויקט. עבור צוותים שעוברים מ-JavaScript ל-TypeScript, התצורה שלנו מהדקת את הדרישות בהדרגה מבלי לחסום את זרימת העבודה.

לפי התיעוד הרשמי של ESLint, שימוש בחוקים מודעי טיפוסים יכול לתפוס עד 90% משגיאות הריצה הנפוצות לפני שהן מגיעות לייצור.