{"id":4706,"date":"2025-08-21T10:48:29","date_gmt":"2025-08-21T10:48:29","guid":{"rendered":"https:\/\/uplatz.com\/blog\/?p=4706"},"modified":"2025-08-30T11:45:36","modified_gmt":"2025-08-30T11:45:36","slug":"babel-pocket-book","status":"publish","type":"post","link":"https:\/\/uplatz.com\/blog\/babel-pocket-book\/","title":{"rendered":"Babel Pocket Book"},"content":{"rendered":"<p><!-- ############################################################ --><br \/>\n<!-- Babel Pocket Book \u2014 Uplatz (Single Column, ~50 Cards, Balanced Headings) --><\/p>\n<div style=\"margin: 16px 0;\">\n<style>\n  .wp-babel-pb{font-family:Arial,Helvetica,sans-serif;max-width:980px;margin:0 auto;}<br \/>\n  .wp-babel-pb .heading{<br \/>\n    background:linear-gradient(135deg,#f59e0b,#ec4899);<br \/>\n    color:#fff;padding:22px;border-radius:18px;text-align:center;margin-bottom:26px;<br \/>\n    box-shadow:0 10px 24px rgba(0,0,0,.10);border:1px solid rgba(255,255,255,.25)<br \/>\n  }<br \/>\n  .wp-babel-pb .heading h2{margin:0;font-size:1.82rem;font-weight:800;letter-spacing:.2px;line-height:1.15}<br \/>\n  .wp-babel-pb .heading p{margin:8px 0 0;font-size:.96rem;opacity:.96}<br \/>\n  .wp-babel-pb .section-title{<br \/>\n    margin:26px 0 14px;padding:12px 16px;background:#f8fafc;border-left:8px solid #2563eb;<br \/>\n    border-radius:12px;font-weight:800;color:#0f172a;font-size:1.02rem;border:1px solid #e2e8f0<br \/>\n  }<br \/>\n  .wp-babel-pb .section-title.color-primary{<br \/>\n    background:linear-gradient(135deg,#fff7ed,#fdf2f8);border-left-color:#f59e0b;color:#0f172a<br \/>\n  }<br \/>\n  .wp-babel-pb .card{<br \/>\n    background:#fff;border-left:6px solid #2563eb;padding:16px;border-radius:14px;<br \/>\n    box-shadow:0 6px 14px rgba(0,0,0,.06);border:1px solid #e5e7eb;margin-bottom:16px<br \/>\n  }<br \/>\n  .wp-babel-pb .card h3{margin:0 0 10px;font-size:1.08rem;color:#0f172a}<br \/>\n  .wp-babel-pb .card p{margin:0;font-size:.96rem;color:#334155;line-height:1.62}<br \/>\n  .mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}<br \/>\n  .wp-babel-pb pre{background:#f5f5f5;color:#111827;border:1px solid #e5e7eb;padding:12px;border-radius:10px;overflow:auto;font-size:.92rem;line-height:1.55}<br \/>\n  .wp-babel-pb code{background:#f1f5f9;padding:0 4px;border-radius:4px;border:1px solid #e2e8f0}<br \/>\n  .muted{color:#64748b}<br \/>\n<\/style>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-5062\" src=\"https:\/\/uplatz.com\/blog\/wp-content\/uploads\/2025\/08\/Babel-1024x576.jpg\" alt=\"\" width=\"840\" height=\"473\" srcset=\"https:\/\/uplatz.com\/blog\/wp-content\/uploads\/2025\/08\/Babel-1024x576.jpg 1024w, https:\/\/uplatz.com\/blog\/wp-content\/uploads\/2025\/08\/Babel-300x169.jpg 300w, https:\/\/uplatz.com\/blog\/wp-content\/uploads\/2025\/08\/Babel-768x432.jpg 768w, https:\/\/uplatz.com\/blog\/wp-content\/uploads\/2025\/08\/Babel.jpg 1280w\" sizes=\"auto, (max-width: 840px) 100vw, 840px\" \/><\/p>\n<div class=\"wp-babel-pb\">\n<div class=\"heading\">\n<h2>Babel Pocket Book \u2014 Uplatz<\/h2>\n<p>50 deep-dive flashcards \u2022 Single column \u2022 Presets &amp; Plugins \u2022 TS &amp; JSX \u2022 Polyfills &amp; browserslist \u2022 Build &amp; Performance \u2022 Interview Q&amp;A<\/p>\n<p class=\"muted\">Readable snippets \u2022 Clear mental models \u2022 Production-oriented tips<\/p>\n<\/div>\n<p><!-- ===================== SECTION 1 ===================== --><\/p>\n<div class=\"section-title color-primary\">Section 1 \u2014 Fundamentals<\/div>\n<div class=\"card\">\n<h3>1) What is Babel?<\/h3>\n<p>A JavaScript compiler that lets you use modern JS\/TS\/JSX today by transforming it to code that runs on your target environments (browsers\/node).<\/p>\n<pre><code class=\"mono\">npm i -D @babel\/core @babel\/cli<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>2) Presets vs Plugins<\/h3>\n<p><b>Plugins<\/b> transform specific syntax (e.g., optional chaining). <b>Presets<\/b> are curated plugin bundles (e.g., <code>@babel\/preset-env<\/code>, <code>@babel\/preset-react<\/code>, <code>@babel\/preset-typescript<\/code>).<\/p>\n<\/div>\n<div class=\"card\">\n<h3>3) preset-env (the workhorse)<\/h3>\n<p>Compiles JS based on your <code>targets<\/code> (or <code>browserslist<\/code>). Adds only the transforms needed.<\/p>\n<pre><code class=\"mono\">npm i -D @babel\/preset-env\r\n\/\/ babel.config.js\r\nmodule.exports = { presets: [['@babel\/preset-env',{ targets: \"&gt;0.25%, not dead\" }]] };<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>4) Where do configs live?<\/h3>\n<p>Project-wide <code>babel.config.js<\/code> (preferred for monorepos) or per-package <code>.babelrc<\/code>\/<code>.babelrc.json<\/code>. CLI flags and package.json <code>\"babel\"<\/code> field also work.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>5) CLI basics<\/h3>\n<pre><code class=\"mono\">npx babel src --out-dir dist --extensions \".js,.jsx,.ts,.tsx\" --source-maps<\/code><\/pre>\n<p>Use <code>--copy-files<\/code> to copy non-compiled assets (e.g., CSS).<\/p>\n<\/div>\n<div class=\"card\">\n<h3>6) Modules handling<\/h3>\n<p>For bundlers (webpack\/rollup\/vite), set <code>modules:false<\/code> to keep ES modules for tree-shaking. For Node or plain output, let Babel convert to CJS.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>7) Proposal \u201csyntax\u201d vs \u201ctransform\u201d<\/h3>\n<p><code>@babel\/plugin-syntax-*<\/code> parses new syntax without changing output (for tooling). <code>@babel\/plugin-transform-*<\/code> compiles it to older JS.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>8) Source maps<\/h3>\n<p>Generate maps for better debugging; bundlers can consume and re-map them.<\/p>\n<pre><code class=\"mono\">npx babel src -d dist --source-maps inline<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>9) \u201cLoose\u201d mode<\/h3>\n<p>Some transforms have <code>loose:true<\/code> for smaller\/faster output with slightly different semantics. Use only if you understand trade-offs.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>10) Bugfixes &amp; shippedProposals<\/h3>\n<p><code>preset-env<\/code> options: <code>bugfixes:true<\/code> applies Safari\/V8 workarounds; <code>shippedProposals:true<\/code> enables features that are in the spec but not yet widely implemented.<\/p>\n<\/div>\n<p><!-- ===================== SECTION 2 ===================== --><\/p>\n<div class=\"section-title\">Section 2 \u2014 TypeScript, React\/JSX, Polyfills &amp; Config<\/div>\n<div class=\"card\">\n<h3>11) TypeScript with Babel<\/h3>\n<p>Babel strips types, but doesn\u2019t type-check. Pair with <code>tsc --noEmit<\/code> for checking.<\/p>\n<pre><code class=\"mono\">npm i -D @babel\/preset-typescript typescript\r\n\/\/ babel.config.js\r\npresets: [['@babel\/preset-env'], '@babel\/preset-typescript']<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>12) JSX &amp; React<\/h3>\n<pre><code class=\"mono\">npm i -D @babel\/preset-react\r\npresets: [['@babel\/preset-react',{ runtime:'automatic', development: process.env.NODE_ENV!=='production' }]]<\/code><\/pre>\n<p>\u201cAutomatic\u201d runtime removes the need to import React for JSX in React 17+.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>13) Next.js \/ CRA \/ Vite<\/h3>\n<p>These toolchains configure Babel for you. Customize via <code>babel.config.js<\/code> or framework-specific hooks only when needed.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>14) Polyfills: core-js &amp; regenerator<\/h3>\n<p>Use <code>@babel\/preset-env<\/code> with <code>useBuiltIns<\/code> and <code>core-js@3<\/code> to inject polyfills based on targets.<\/p>\n<pre><code class=\"mono\">npm i -D core-js regenerator-runtime\r\npresets: [['@babel\/preset-env',{ useBuiltIns:'usage', corejs:3 }]]<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>15) @babel\/runtime &amp; transform-runtime<\/h3>\n<p>Avoid duplicating helpers in every file; use runtime imports.<\/p>\n<pre><code class=\"mono\">npm i -D @babel\/plugin-transform-runtime @babel\/runtime\r\nplugins: [['@babel\/plugin-transform-runtime',{ corejs:false }]]<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>16) browserslist integration<\/h3>\n<p>Define targets once in <code>package.json<\/code> or <code>.browserslistrc<\/code>; Babel, Autoprefixer, and others read it.<\/p>\n<pre><code class=\"mono\">\"browserslist\": [\"&gt;0.25%\",\"not dead\"]<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>17) Env-specific overrides<\/h3>\n<p>Different builds for dev\/prod\/test.<\/p>\n<pre><code class=\"mono\">module.exports = {\r\n  presets:[['@babel\/preset-env']],\r\n  env:{ test:{ presets:[['@babel\/preset-env',{ targets:{ node:'current' }}]] } }\r\n};<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>18) Per-file overrides<\/h3>\n<pre><code class=\"mono\">overrides:[{ test:\/\\.tsx?$\/, presets:['@babel\/preset-typescript'] }]<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>19) Ignore\/only<\/h3>\n<p>Speed up builds by excluding generated or external code (e.g., <code>node_modules<\/code>, <code>dist<\/code>).<\/p>\n<\/div>\n<div class=\"card\">\n<h3>20) Decorators &amp; class fields<\/h3>\n<p>These need coordinated plugins and options; align with your framework\u2019s expectations (e.g., TypeScript legacy decorators).<\/p>\n<pre><code class=\"mono\">npm i -D @babel\/plugin-proposal-decorators @babel\/plugin-proposal-class-properties\r\nplugins:[\r\n  ['@babel\/plugin-proposal-decorators',{ version:'legacy' }],\r\n  ['@babel\/plugin-proposal-class-properties',{ loose:true }]\r\n]<\/code><\/pre>\n<\/div>\n<p><!-- ===================== SECTION 3 ===================== --><\/p>\n<div class=\"section-title\">Section 3 \u2014 Tooling &amp; Build Pipelines<\/div>\n<div class=\"card\">\n<h3>21) Babel + Webpack<\/h3>\n<p>Use <code>babel-loader<\/code> for JS\/TS\/JSX; set <code>cacheDirectory:true<\/code>.<\/p>\n<pre><code class=\"mono\">npm i -D babel-loader\r\n\/\/ webpack.module.rules\r\n{ test:\/\\.(t|j)sx?$\/, exclude:\/node_modules\/, use:{ loader:'babel-loader', options:{ cacheDirectory:true }}}<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>22) Babel + Rollup<\/h3>\n<pre><code class=\"mono\">npm i -D @rollup\/plugin-babel\r\n\/\/ rollup.config.js\r\nbabel({ babelHelpers:'runtime', extensions:['.js','.jsx','.ts','.tsx'] })<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>23) Babel + Vite<\/h3>\n<p>Vite uses esbuild for TS\/JS by default; add Babel only when you need Babel-only plugins (macros, special transforms).<\/p>\n<\/div>\n<div class=\"card\">\n<h3>24) Library builds<\/h3>\n<p>Publish dual ESM\/CJS with <code>exports<\/code> map. Don\u2019t transpile user code; transpile your sources, ship types separately if using TS.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>25) Node targets<\/h3>\n<p>For server code, target the running Node version to minimize transforms.<\/p>\n<pre><code class=\"mono\">presets:[['@babel\/preset-env',{ targets:{ node:'20' }, modules:'auto' }]]<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>26) babel-register (on-the-fly)<\/h3>\n<p>Useful for tools\/tests. Not for production servers.<\/p>\n<pre><code class=\"mono\">require('@babel\/register')({ extensions:['.js','.ts','.tsx'] });<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>27) Caching<\/h3>\n<p>Use loader caches and persistent caches (webpack) to speed up rebuilds. Avoid dynamic config that busts cache every run.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>28) Minification<\/h3>\n<p>Prefer Terser (via bundler). <code>babel-minify<\/code> exists but is rarely needed in 2025.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>29) tree-shaking &amp; sideEffects<\/h3>\n<p>Keep ES modules, mark packages <code>\"sideEffects\": false<\/code> (or specific files) to enable dead-code elimination.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>30) Dynamic import &amp; top-level await<\/h3>\n<p>Ensure bundler understands them; Babel parses via syntax plugins if needed.<\/p>\n<pre><code class=\"mono\">npm i -D @babel\/plugin-syntax-dynamic-import @babel\/plugin-syntax-top-level-await<\/code><\/pre>\n<\/div>\n<p><!-- ===================== SECTION 4 ===================== --><\/p>\n<div class=\"section-title\">Section 4 \u2014 AST, Custom Plugins, Testing &amp; Troubleshooting<\/div>\n<div class=\"card\">\n<h3>31) Programmatic API<\/h3>\n<pre><code class=\"mono\">const babel = require('@babel\/core');\r\nconst out = babel.transformSync(code,{ presets:['@babel\/preset-env'] });<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>32) Parsing\/Traversing\/Generating<\/h3>\n<pre><code class=\"mono\">const parser = require('@babel\/parser');\r\nconst traverse = require('@babel\/traverse').default;\r\nconst t = require('@babel\/types');\r\nconst generate = require('@babel\/generator').default;\r\n\r\nconst ast = parser.parse(code,{ sourceType:'module', plugins:['typescript','jsx'] });\r\ntraverse(ast,{ Identifier(p){ if(p.node.name==='old') p.node.name='next'; }});\r\nconst { code: out } = generate(ast);<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>33) Write a tiny plugin<\/h3>\n<pre><code class=\"mono\">module.exports = function() {\r\n  return { visitor:{ Identifier(path){ if(path.node.name==='DEBUG'){ path.remove(); } } } };\r\n};<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>34) Plugin ordering matters<\/h3>\n<p>Plugins run first-to-last; presets run last-to-first (inner first). Place syntax plugins before transforms that need them.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>35) babel-plugin-macros<\/h3>\n<p>Compile-time helpers (e.g., <code>linaria<\/code>, <code>graphql.macro<\/code>) without custom config in each app.<\/p>\n<pre><code class=\"mono\">npm i -D babel-plugin-macros\r\nplugins:['babel-plugin-macros']<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>36) Jest + Babel<\/h3>\n<pre><code class=\"mono\">npm i -D babel-jest @babel\/preset-env @babel\/preset-react\r\n\/\/ jest.config.js\r\ntransform:{ '^.+\\\\.[tj]sx?$':'babel-jest' }<\/code><\/pre>\n<\/div>\n<div class=\"card\">\n<h3>37) ESLint &amp; Type Checking<\/h3>\n<p>Babel doesn\u2019t type-check; run <code>tsc --noEmit<\/code> or <code>vue-tsc<\/code> in CI; pair with ESLint for style\/linting.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>38) Common errors<\/h3>\n<p>\u201cSupport for the experimental syntax \u2026\u201d \u2192 missing syntax\/transform plugin. \u201cUnknown file extension .ts\u201d \u2192 add preset-typescript or loader ext list.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>39) Debugging transforms<\/h3>\n<p>Use <code>--verbose<\/code>, <code>BABEL_SHOW_CONFIG_FOR<\/code>, and <code>babel --config-file<\/code> to inspect exactly which config applies.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>40) Monorepos<\/h3>\n<p>Prefer root <code>babel.config.js<\/code> (not .babelrc) so packages share config; use <code>overrides<\/code> to tweak per-package.<\/p>\n<\/div>\n<p><!-- ===================== SECTION 5 ===================== --><\/p>\n<div class=\"section-title\">Section 5 \u2014 Performance, Migration, Security &amp; Interview Q&amp;A<\/div>\n<div class=\"card\">\n<h3>41) Performance wins<\/h3>\n<p>Limit transforms, keep ES modules, cache aggressively, avoid transpiling <code>node_modules<\/code>, and pick realistic targets (don\u2019t target IE unless you must).<\/p>\n<\/div>\n<div class=\"card\">\n<h3>42) Using SWC\/Esbuild with Babel<\/h3>\n<p>Many projects compile TS\/JS with swc\/esbuild for speed and add Babel for React macros or niche plugins.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>43) Security &amp; supply chain<\/h3>\n<p>Lock dependency versions, audit regularly, and avoid unknown plugins. Treat macros as compile-time code execution.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>44) Shipping polyfills safely<\/h3>\n<p>Prefer <code>usage<\/code>-based insertion with <code>core-js@3<\/code>; avoid global pollution in libraries\u2014document peer polyfills or use <code>@babel\/runtime-corejs3<\/code>.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>45) Migrate from Babel 6 \u2192 7+<\/h3>\n<p>Replace old preset names (<code>env<\/code>), add <code>@babel\/*<\/code> scope, re-check decorators\/class fields options, and update <code>polyfill<\/code> strategy to core-js@3.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>46) TS-only vs Babel+TS<\/h3>\n<p>If you don\u2019t need JSX\/many Babel plugins, <code>tsc<\/code> emit or swc can be simpler. Use Babel when you need React\/JSX, macros, or ecosystem plugins.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>47) Publishing libraries<\/h3>\n<p>Ship ESM (and optionally CJS). Include sourcemaps. Don\u2019t downlevel too far; let consumers decide targets. Document required polyfills.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>48) Runtime helpers duplication<\/h3>\n<p>If bundle is bloated by helpers, add <code>@babel\/plugin-transform-runtime<\/code> with <code>@babel\/runtime<\/code> and set bundler to externalize it for libs.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>49) Troubleshooting \u201cregeneratorRuntime is not defined\u201d<\/h3>\n<p>Include <code>regenerator-runtime\/runtime<\/code> or set <code>useBuiltIns:'usage'<\/code> with core-js+regenerator; or use transform-runtime with <code>regenerator:true<\/code>.<\/p>\n<\/div>\n<div class=\"card\">\n<h3>50) Interview Q&amp;A \u2014 Practical<\/h3>\n<p><b>When preset-env?<\/b> Always for cross-browser builds; it compiles based on browserslist.<\/p>\n<p><b>Polyfill strategy?<\/b> <code>useBuiltIns:'usage'<\/code> + <code>core-js@3<\/code> to inject only what\u2019s needed.<\/p>\n<p><b>Why transform-runtime?<\/b> Deduplicate helpers and avoid polluting globals, especially in libraries.<\/p>\n<p><b>TS with Babel?<\/b> Babel strips types\u2014pair with <code>tsc --noEmit<\/code> for type-checking.<\/p>\n<p><b>Decorators gotchas?<\/b> Align plugin options (legacy vs 2022). Mismatched settings cause runtime errors.<\/p>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Babel Pocket Book \u2014 Uplatz 50 deep-dive flashcards \u2022 Single column \u2022 Presets &amp; Plugins \u2022 TS &amp; JSX \u2022 Polyfills &amp; browserslist \u2022 Build &amp; Performance \u2022 Interview Q&amp;A <span class=\"readmore\"><a href=\"https:\/\/uplatz.com\/blog\/babel-pocket-book\/\">Read More &#8230;<\/a><\/span><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2535,2462],"tags":[],"class_list":["post-4706","post","type-post","status-publish","format-standard","hentry","category-babel","category-pocket-book"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Babel Pocket Book | Uplatz Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/uplatz.com\/blog\/babel-pocket-book\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Babel Pocket Book | Uplatz Blog\" \/>\n<meta property=\"og:description\" content=\"Babel Pocket Book \u2014 Uplatz 50 deep-dive flashcards \u2022 Single column \u2022 Presets &amp; Plugins \u2022 TS &amp; JSX \u2022 Polyfills &amp; browserslist \u2022 Build &amp; Performance \u2022 Interview Q&amp;A Read More ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/uplatz.com\/blog\/babel-pocket-book\/\" \/>\n<meta property=\"og:site_name\" content=\"Uplatz Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Uplatz-1077816825610769\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-21T10:48:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-30T11:45:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/uplatz.com\/blog\/wp-content\/uploads\/2025\/08\/Babel.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"uplatzblog\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@uplatz_global\" \/>\n<meta name=\"twitter:site\" content=\"@uplatz_global\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"uplatzblog\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/babel-pocket-book\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/babel-pocket-book\\\/\"},\"author\":{\"name\":\"uplatzblog\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#\\\/schema\\\/person\\\/8ecae69a21d0757bdb2f776e67d2645e\"},\"headline\":\"Babel Pocket Book\",\"datePublished\":\"2025-08-21T10:48:29+00:00\",\"dateModified\":\"2025-08-30T11:45:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/babel-pocket-book\\\/\"},\"wordCount\":859,\"publisher\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/babel-pocket-book\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/Babel-1024x576.jpg\",\"articleSection\":[\"Babel\",\"Pocket Book\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/babel-pocket-book\\\/\",\"url\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/babel-pocket-book\\\/\",\"name\":\"Babel Pocket Book | Uplatz Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/babel-pocket-book\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/babel-pocket-book\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/Babel-1024x576.jpg\",\"datePublished\":\"2025-08-21T10:48:29+00:00\",\"dateModified\":\"2025-08-30T11:45:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/babel-pocket-book\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/uplatz.com\\\/blog\\\/babel-pocket-book\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/babel-pocket-book\\\/#primaryimage\",\"url\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/Babel.jpg\",\"contentUrl\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/Babel.jpg\",\"width\":1280,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/babel-pocket-book\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Babel Pocket Book\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/\",\"name\":\"Uplatz Blog\",\"description\":\"Uplatz is a global IT Training &amp; Consulting company\",\"publisher\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#organization\",\"name\":\"uplatz.com\",\"url\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/11\\\/Uplatz-Logo-Copy-2.png\",\"contentUrl\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/11\\\/Uplatz-Logo-Copy-2.png\",\"width\":1280,\"height\":800,\"caption\":\"uplatz.com\"},\"image\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Uplatz-1077816825610769\\\/\",\"https:\\\/\\\/x.com\\\/uplatz_global\",\"https:\\\/\\\/www.instagram.com\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/7956715?trk=tyah&amp;amp;amp;amp;trkInfo=clickedVertical:company,clickedEntityId:7956715,idx:1-1-1,tarId:1464353969447,tas:uplatz\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#\\\/schema\\\/person\\\/8ecae69a21d0757bdb2f776e67d2645e\",\"name\":\"uplatzblog\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7f814c72279199f59ded4418a8653ad15f5f8904ac75e025a4e2abe24d58fa5d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7f814c72279199f59ded4418a8653ad15f5f8904ac75e025a4e2abe24d58fa5d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7f814c72279199f59ded4418a8653ad15f5f8904ac75e025a4e2abe24d58fa5d?s=96&d=mm&r=g\",\"caption\":\"uplatzblog\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Babel Pocket Book | Uplatz Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/uplatz.com\/blog\/babel-pocket-book\/","og_locale":"en_US","og_type":"article","og_title":"Babel Pocket Book | Uplatz Blog","og_description":"Babel Pocket Book \u2014 Uplatz 50 deep-dive flashcards \u2022 Single column \u2022 Presets &amp; Plugins \u2022 TS &amp; JSX \u2022 Polyfills &amp; browserslist \u2022 Build &amp; Performance \u2022 Interview Q&amp;A Read More ...","og_url":"https:\/\/uplatz.com\/blog\/babel-pocket-book\/","og_site_name":"Uplatz Blog","article_publisher":"https:\/\/www.facebook.com\/Uplatz-1077816825610769\/","article_published_time":"2025-08-21T10:48:29+00:00","article_modified_time":"2025-08-30T11:45:36+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/uplatz.com\/blog\/wp-content\/uploads\/2025\/08\/Babel.jpg","type":"image\/jpeg"}],"author":"uplatzblog","twitter_card":"summary_large_image","twitter_creator":"@uplatz_global","twitter_site":"@uplatz_global","twitter_misc":{"Written by":"uplatzblog","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/uplatz.com\/blog\/babel-pocket-book\/#article","isPartOf":{"@id":"https:\/\/uplatz.com\/blog\/babel-pocket-book\/"},"author":{"name":"uplatzblog","@id":"https:\/\/uplatz.com\/blog\/#\/schema\/person\/8ecae69a21d0757bdb2f776e67d2645e"},"headline":"Babel Pocket Book","datePublished":"2025-08-21T10:48:29+00:00","dateModified":"2025-08-30T11:45:36+00:00","mainEntityOfPage":{"@id":"https:\/\/uplatz.com\/blog\/babel-pocket-book\/"},"wordCount":859,"publisher":{"@id":"https:\/\/uplatz.com\/blog\/#organization"},"image":{"@id":"https:\/\/uplatz.com\/blog\/babel-pocket-book\/#primaryimage"},"thumbnailUrl":"https:\/\/uplatz.com\/blog\/wp-content\/uploads\/2025\/08\/Babel-1024x576.jpg","articleSection":["Babel","Pocket Book"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/uplatz.com\/blog\/babel-pocket-book\/","url":"https:\/\/uplatz.com\/blog\/babel-pocket-book\/","name":"Babel Pocket Book | Uplatz Blog","isPartOf":{"@id":"https:\/\/uplatz.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/uplatz.com\/blog\/babel-pocket-book\/#primaryimage"},"image":{"@id":"https:\/\/uplatz.com\/blog\/babel-pocket-book\/#primaryimage"},"thumbnailUrl":"https:\/\/uplatz.com\/blog\/wp-content\/uploads\/2025\/08\/Babel-1024x576.jpg","datePublished":"2025-08-21T10:48:29+00:00","dateModified":"2025-08-30T11:45:36+00:00","breadcrumb":{"@id":"https:\/\/uplatz.com\/blog\/babel-pocket-book\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/uplatz.com\/blog\/babel-pocket-book\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/uplatz.com\/blog\/babel-pocket-book\/#primaryimage","url":"https:\/\/uplatz.com\/blog\/wp-content\/uploads\/2025\/08\/Babel.jpg","contentUrl":"https:\/\/uplatz.com\/blog\/wp-content\/uploads\/2025\/08\/Babel.jpg","width":1280,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/uplatz.com\/blog\/babel-pocket-book\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/uplatz.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Babel Pocket Book"}]},{"@type":"WebSite","@id":"https:\/\/uplatz.com\/blog\/#website","url":"https:\/\/uplatz.com\/blog\/","name":"Uplatz Blog","description":"Uplatz is a global IT Training &amp; Consulting company","publisher":{"@id":"https:\/\/uplatz.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/uplatz.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/uplatz.com\/blog\/#organization","name":"uplatz.com","url":"https:\/\/uplatz.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/uplatz.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/uplatz.com\/blog\/wp-content\/uploads\/2016\/11\/Uplatz-Logo-Copy-2.png","contentUrl":"https:\/\/uplatz.com\/blog\/wp-content\/uploads\/2016\/11\/Uplatz-Logo-Copy-2.png","width":1280,"height":800,"caption":"uplatz.com"},"image":{"@id":"https:\/\/uplatz.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Uplatz-1077816825610769\/","https:\/\/x.com\/uplatz_global","https:\/\/www.instagram.com\/","https:\/\/www.linkedin.com\/company\/7956715?trk=tyah&amp;amp;amp;amp;trkInfo=clickedVertical:company,clickedEntityId:7956715,idx:1-1-1,tarId:1464353969447,tas:uplatz"]},{"@type":"Person","@id":"https:\/\/uplatz.com\/blog\/#\/schema\/person\/8ecae69a21d0757bdb2f776e67d2645e","name":"uplatzblog","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/7f814c72279199f59ded4418a8653ad15f5f8904ac75e025a4e2abe24d58fa5d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7f814c72279199f59ded4418a8653ad15f5f8904ac75e025a4e2abe24d58fa5d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7f814c72279199f59ded4418a8653ad15f5f8904ac75e025a4e2abe24d58fa5d?s=96&d=mm&r=g","caption":"uplatzblog"}}]}},"_links":{"self":[{"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/posts\/4706","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/comments?post=4706"}],"version-history":[{"count":2,"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/posts\/4706\/revisions"}],"predecessor-version":[{"id":5063,"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/posts\/4706\/revisions\/5063"}],"wp:attachment":[{"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/media?parent=4706"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/categories?post=4706"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/tags?post=4706"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}