הגדרת Babel לטרנספילציית JavaScript: Presets ו-Plugins

ג'אווה סקריפט מודרני ו-JSX אינם פועלים בדפדפנים ישנים ללא עיבוד נוסף, מה שמאט את הפיתוח ומעלה את עלויות התחזוקה. אנו מגדירים את Babel לטרנספילציית קוד, ובוחרים presets ו-plugins המותאמים לפרויקט שלכם. הצוות שלנו מספק הגדרה מלאה, מהתצורה ועד לתמיכה שוטפת, ומבטיח ביצועים יציבים ו-polyfills מדויקים.

פיתוח ותחזוקה של כל סוגי האתרים:

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

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הגדרת Babel לטרנספילציית JavaScript: Presets ו-Plugins
בינוני
מ- 4 שעות עד 2 ימים

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

שאלות נפוצות

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

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113
  • פיתוח אתר עבור SBH Partners
    פיתוח אתר עבור SBH Partners
    1201
  • פיתוח אתר עבור Red Pear
    פיתוח אתר עבור Red Pear
    619

הגדרת Babel לטרנספילציית JavaScript

JavaScript מודרני עם אופרטורים ?. ו-?? לא עובד ב-Internet Explorer 11. JSX ו-TypeScript דורשים גם הם עיבוד נוסף. Babel פותר את הבעיות האלה: הוא הופך קוד מודרני לתחביר שדפדפנים ישנים מבינים ומבצע טרנספילציה של JSX, TypeScript, הצעות TC39 ניסיוניות ודקורטורים. הגדרנו את Babel לעשרות פרויקטים—מעמודי נחיתה ועד פלטפורמות SaaS גדולות. הגדרה נכונה מקטינה את גודל ה-bundle ב-20% ומאיצה את טעינת הדפים. במאמר זה, נפרק הגדרה מוכנה לייצור.

מה צריך לדעת לפני שמגדירים

בניות frontend מודרניות כמעט ולא מסתדרות בלי Babel. גם אם משתמשים ב-SWC למהירות, Babel נשאר חיוני לטרנספורמציות AST מורכבות ותוספים מותאמים אישית. הניסיון שלנו מראה ש-Babel מוגדר כראוי מקטין את זמן הדיבאג לדפדפנים ישנים ב-30% ומפחית עלויות תחזוקה באמצעות בחירת polyfill מדויקת. חשוב להבין את ההבדל בין presets לתוספים—presets הם קבוצות של תוספים, ותוספים מבצעים טרנספורמציות AST ספציפיות.

איך להגדיר את Babel: שלב אחר שלב

התקנה והגדרה בסיסית

התקן תלויות עם פקודה אחת:

npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/preset-react @babel/preset-typescript @babel/plugin-transform-runtime @babel/runtime 

צור npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/preset-react @babel/preset-typescript @babel/plugin-transform-runtime @babel/runtime בשורש הפרויקט. להלן הגדרה מוכנה ל-frontend מודרני עם React ו-TypeScript. שים לב לקטע babel.config.json: הוא עוקף הגדרות עבור סביבת הבדיקות.

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": "> 0.5%, last 2 versions, not dead, not ie 11",
        "useBuiltIns": "usage",
        "corejs": "3.38",
        "modules": false
      }
    ],
    [
      "@babel/preset-react",
      {
        "runtime": "automatic"
      }
    ],
    [
      "@babel/preset-typescript",
      {
        "allExtensions": true,
        "isTSX": true
      }
    ]
  ],
  "plugins": [
    [
      "@babel/plugin-transform-runtime",
      {
        "corejs": false,
        "helpers": true,
        "regenerator": true
      }
    ]
  ],
  "env": {
    "test": {
      "presets": [
        [
          "@babel/preset-env",
          {
            "targets": {
              "node": "current"
            },
            "modules": "commonjs"
          }
        ]
      ]
    }
  }
}

הפרמטר env הוא קריטי עבור bundlers—הוא מאפשר ל-Webpack או Rollup לטפל במודולי ECMAScript ולבצע tree-shaking. בסביבת הבדיקות (Jest), { "presets": [ [ "@babel/preset-env", { "targets": "> 0.5%, last 2 versions, not dead, not ie 11", "useBuiltIns": "usage", "corejs": "3.38", "modules": false } ], [ "@babel/preset-react", { "runtime": "automatic" } ], [ "@babel/preset-typescript", { "allExtensions": true, "isTSX": true } ] ], "plugins": [ [ "@babel/plugin-transform-runtime", { "corejs": false, "helpers": true, "regenerator": true } ] ], "env": { "test": { "presets": [ ["@babel/preset-env", { "targets": { "node": "current" }, "modules": "commonjs" }] ] } } } נדרש כי Node מצפה ל-CommonJS.

למה סביבות נפרדות?קטע ה-env מאפשר לך לעקוף כל הגדרה עבור סביבה ספציפית. לדוגמה, ניתן להשבית minification בפיתוח ולהוסיף תוספים להסרת console.log בייצור.

בחירת Presets: טבלה

Preset מטרה מתי לכלול
@babel/preset-env טרנספילציה של JS מודרני לדפדפני יעד תמיד (חובה)
@babel/preset-react המרת JSX ותחביר React פרויקטי React
@babel/preset-typescript תמיכה ב-TypeScript (ללא בדיקת טיפוסים) פרויקטי TypeScript

יעדים ו-browserslist

במקום לקודד יעדים בהגדרת Babel, השתמש ב-"modules": false או בקטע "modules": "commonjs" בתוך .browserslistrc—קובץ זה נקרא אוטומטית על ידי Babel, Autoprefixer וכלים אחרים. דוגמה לייצור:

# .browserslistrc
[production]
> 0.5%
last 2 versions
not dead
not ie 11

[development]
last 1 chrome version
last 1 firefox version
last 1 safari version

Browserslist מכסה כ-95% מהדפדפנים הפעילים. אם צריך לתמוך ב-IE 11, הוסף browserslist, אבל שים לב שזה יגדיל את גודל ה-polyfill ב-15–20%.

דקורטורים ב-TypeScript

דקורטורים (metadata, Angular, MobX, TypeORM) דורשים תוסף מיוחד:

npm install --save-dev @babel/plugin-proposal-decorators 
{
  "plugins": [
    [
      "@babel/plugin-proposal-decorators",
      {
        "version": "2023-11"
      }
    ]
  ]
}

הגרסה package.json היא התקן הסופי של TC39 Stage 3. עבור דקורטורים legacy של TypeScript (# .browserslistrc [production] > 0.5% last 2 versions not dead not ie 11 [development] last 1 chrome version last 1 firefox version last 1 safari version ), השתמש ב-"ie 11".

כתיבת תוסף מותאם אישית

תוספי Babel הם פונקציות שעובדות עם AST. דוגמה: החלף את כל npm install --save-dev @babel/plugin-proposal-decorators ב-noop בייצור:

// babel-plugin-remove-console.js
module.exports = function ({ types: t }) {
  return {
    visitor: {
      CallExpression(path) {
        const callee = path.get('callee');
        if (
          callee.isMemberExpression() &&
          callee.get('object').isIdentifier({ name: 'console' }) &&
          callee.get('property').isIdentifier({ name: 'log' })
        ) {
          path.remove();
        }
      },
    },
  };
};

חבר את התוסף דרך קטע ה-env ב-{ "plugins": [ ["@babel/plugin-proposal-decorators", { "version": "2023-11" }] ] } . תוסף מותאם אישית יכול לעשות כל דבר—מהחלפת קריאות API ועד להטמעת משאבים. זה מספק גמישות ש-SWC לא יכול להתאים לה.

אינטגרציה עם כלי בנייה

Webpack

התקן "2023-11" והוסף כלל ל-experimentalDecorators: true. הפעל caching כדי להאיץ בניות חוזרות.

// webpack.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.(js|jsx|ts|tsx)$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            cacheDirectory: true,
            cacheCompression: false,
          },
        },
      },
    ],
  },
};

Jest

Jest קולט אוטומטית את הגדרת Babel אם "legacy" קיים. עבור הגדרה נפרדת, ציין את הנתיב ב-console.log().

// jest.config.js
module.exports = {
  transform: {
    '^.+\.(js|jsx|ts|tsx)$': ['babel-jest', { configFile: './babel.config.test.json' }],
  },
};

תהליך ההתקנה ולוחות זמנים

הגדרת Babel המקצועית שלנו כוללת:

  • הגדרת // babel-plugin-remove-console.js module.exports = function ({ types: t }) { return { visitor: { CallExpression(path) { const callee = path.get('callee'); if ( callee.isMemberExpression() && callee.get('object').isIdentifier({ name: 'console' }) && callee.get('property').isIdentifier({ name: 'log' }) ) { path.remove(); } }, }, }; }; עם presets מותאמים ליעדים שלך.
  • אינטגרציה עם Webpack, Vite או bundler אחר.
  • הגדרת polyfill דרך core-js (שימוש ב-babel.config.json מקטין את גודל ה-bundle ב-20–30% לעומת babel-loader).
  • תיעוד עבור browserslist וסביבות.
  • תמיכה בתוספים מותאמים אישית אם נדרש.
  • בנייה ובדיקה בכל דפדפני היעד.
סוג התקנה זמן
בסיסי (React/TypeScript) 1–2 שעות
עם דקורטורים ו-polyfills 4–8 שעות

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

האצת בניות וניתוח

Babel יכול להיות צוואר בקבוק. השתמש ב-caching (webpack.config.js), ולבניות ייצור שקול לעבור ל-SWC. עם זאת, אם אתה צריך טרנספורמציות לא סטנדרטיות, Babel הוא בלתי מנוצח.

נתח מה מתורגם באמצעות ה-CLI: // webpack.config.js module.exports = { module: { rules: [ { test: /\.(js|jsx|ts|tsx)$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: { cacheDirectory: true, cacheCompression: false, }, }, }, ], }, }; .

למה להפקיד את ההגדרה בידי מקצוענים?

הגדרת Babel שגויה מובילה ל-polyfills כפולים, גודל bundle מוגדל וזמני טעינה איטיים יותר. במהלך השנים, הגדרנו את Babel ל-50+ פרויקטים ומבטיחים פעולה תקינה בכל דפדפני היעד. הזמן הגדרת Babel לפרויקט שלך—ואנחנו נספק הגדרה אופטימלית.