<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sana Mumtaz</title>
    <description>The latest articles on DEV Community by Sana Mumtaz (@sanamumtaz).</description>
    <link>https://dev.to/sanamumtaz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F691446%2F9cafd7cb-6e7f-488a-960b-87c7f0c7cbb0.jpeg</url>
      <title>DEV Community: Sana Mumtaz</title>
      <link>https://dev.to/sanamumtaz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sanamumtaz"/>
    <language>en</language>
    <item>
      <title>Helpful &amp; Daily-Use Websites for Developers</title>
      <dc:creator>Sana Mumtaz</dc:creator>
      <pubDate>Thu, 26 Feb 2026 15:45:54 +0000</pubDate>
      <link>https://dev.to/sanamumtaz/helpful-daily-use-websites-for-developers-12j4</link>
      <guid>https://dev.to/sanamumtaz/helpful-daily-use-websites-for-developers-12j4</guid>
      <description>&lt;p&gt;As developers, we end up bookmarking a bunch of random tools that quietly save us hours every week. Here's a short, practical list of &lt;strong&gt;websites I actually use in day-to-day dev work&lt;/strong&gt; — no fluff, just useful stuff.&lt;/p&gt;




&lt;h3&gt;
  
  
  🌐 Free Public APIs - APIs for side projects &amp;amp; experiments
&lt;/h3&gt;

&lt;p&gt;👉 &lt;a href="https://www.freepublicapis.com/" rel="noopener noreferrer"&gt;https://www.freepublicapis.com/&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;When you're building demos, learning a new framework, or testing API integrations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find free APIs by category (weather, crypto, movies, etc.)&lt;/li&gt;
&lt;li&gt;Great for side projects and mock data&lt;/li&gt;
&lt;li&gt;Saves you from spinning up fake backends&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🎨 Carbon - Pretty code snippets for sharing
&lt;/h3&gt;

&lt;p&gt;👉 &lt;a href="https://carbon.now.sh" rel="noopener noreferrer"&gt;https://carbon.now.sh&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Turn ugly screenshots of code into beautiful ones. Perfect for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Blog posts&lt;/li&gt;
&lt;li&gt;Slides&lt;/li&gt;
&lt;li&gt;X/LinkedIn flexing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You paste code → pick a theme → export image → look 10x more professional.&lt;/p&gt;




&lt;h3&gt;
  
  
  🖼️ Favicon.io - Generate favicons in seconds
&lt;/h3&gt;

&lt;p&gt;👉 &lt;a href="https://favicon.io" rel="noopener noreferrer"&gt;https://favicon.io&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Favicons are one of those things you &lt;em&gt;always&lt;/em&gt; forget until the very end. This site lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate favicons from text, emojis, or images
&lt;/li&gt;
&lt;li&gt;Download all required sizes
&lt;/li&gt;
&lt;li&gt;Drop them straight into your project
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No more "why is the default browser icon showing?" moments.&lt;/p&gt;




&lt;h3&gt;
  
  
  📁 Sample Files - Test files for dev &amp;amp; QA
&lt;/h3&gt;

&lt;p&gt;👉 &lt;a href="https://www.mzeeshan.me/samplefiles" rel="noopener noreferrer"&gt;https://www.mzeeshan.me/samplefiles&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Need a random PDF, image, video, or large file for testing uploads, previews, or download flows? This site has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different file formats
&lt;/li&gt;
&lt;li&gt;Different sizes
&lt;/li&gt;
&lt;li&gt;One-click downloads
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Extremely handy for frontend testing and QA scenarios.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔧 Uiverse - Ready-to-use UI components
&lt;/h3&gt;

&lt;p&gt;👉 &lt;a href="https://uiverse.io" rel="noopener noreferrer"&gt;https://uiverse.io&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;A community-driven collection of buttons, toggles, cards, loaders, and more. Great when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want quick UI inspiration while shaping product experiences&lt;/li&gt;
&lt;li&gt;You need a component fast and don't want to design from scratch&lt;/li&gt;
&lt;li&gt;You're prototyping and don't care about pixel perfection (yet)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All components are open-source and published under the MIT License.&lt;/p&gt;




&lt;h3&gt;
  
  
  📚 DevDocs - All docs in one place
&lt;/h3&gt;

&lt;p&gt;👉 &lt;a href="https://devdocs.io" rel="noopener noreferrer"&gt;https://devdocs.io&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;This is basically Google for documentation, but better:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Actively maintained, free, and open source&lt;/li&gt;
&lt;li&gt;Offline support&lt;/li&gt;
&lt;li&gt;Multiple libraries/frameworks in one UI
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're tired of juggling 10 tabs for MDN, React docs, and Node docs - this one's a keeper.&lt;/p&gt;




&lt;h3&gt;
  
  
  🗺️ Roadmap.sh - Learning paths for developers
&lt;/h3&gt;

&lt;p&gt;👉 &lt;a href="https://roadmap.sh" rel="noopener noreferrer"&gt;https://roadmap.sh&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;If you ever feel lost about &lt;em&gt;what to learn next&lt;/em&gt;, roadmap.sh is gold:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clear learning roadmaps for frontend, backend, DevOps, AI, etc.&lt;/li&gt;
&lt;li&gt;Great for juniors and seniors who want to fill knowledge gaps&lt;/li&gt;
&lt;li&gt;Helps you structure learning instead of randomly hopping tutorials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it as Google Maps for your dev career.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⭐ Honorable Mention: SVG Crop
&lt;/h3&gt;

&lt;p&gt;👉 &lt;a href="https://svgcrop.com" rel="noopener noreferrer"&gt;https://svgcrop.com&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Simple but clutch tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upload or paste an SVG
&lt;/li&gt;
&lt;li&gt;Automatically crop or trim empty space
&lt;/li&gt;
&lt;li&gt;Download or copy a clean, optimized SVG
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A lifesaver when downloaded SVGs come with random whitespace.&lt;/p&gt;




&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;None of these tools are "revolutionary", but together they remove small daily annoyances - and that's where real productivity gains come from.&lt;/p&gt;

&lt;p&gt;If you've got similar low-key useful websites, drop them in the comments. I'm always down to steal good dev bookmarks 😄&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>resources</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Webpack Dev Server: Setting up proxy</title>
      <dc:creator>Sana Mumtaz</dc:creator>
      <pubDate>Tue, 05 Oct 2021 05:46:13 +0000</pubDate>
      <link>https://dev.to/sanamumtaz/webpack-dev-server-setting-up-proxy-59bk</link>
      <guid>https://dev.to/sanamumtaz/webpack-dev-server-setting-up-proxy-59bk</guid>
      <description>&lt;p&gt;In this article, I'll show you how to configure webpack-dev-server for proxying requests from React frontend to Node/Express backend.&lt;/p&gt;

&lt;h1&gt;
  
  
  Getting Started
&lt;/h1&gt;

&lt;p&gt;I won't go into much details on how to set up React, Webpack and Babel. You can either create the project from scratch or you can do the following:&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure Frontend
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1- Use Create React App
&lt;/h3&gt;

&lt;p&gt;Run &lt;code&gt;create-react-app&lt;/code&gt; to create React frontend for your web app.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;npx&lt;/span&gt; &lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;react&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="nx"&gt;my&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  2- Configure Webpack
&lt;/h3&gt;

&lt;p&gt;Add webpack and its relevant packages to your project.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;yarn&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="nx"&gt;webpack&lt;/span&gt; &lt;span class="nx"&gt;webpack&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;cli&lt;/span&gt; &lt;span class="nx"&gt;webpack&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;dev&lt;/span&gt;
&lt;span class="nx"&gt;yarn&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;webpack&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;plugin&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;small&gt;&lt;em&gt;I'll be using yarn throughout this article&lt;/em&gt;&lt;/small&gt;&lt;br&gt;
At the root of project folder, create file &lt;code&gt;webpack.config.js&lt;/code&gt;. I won't go into details of the configuration as its very basic.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;HtmlWebpackPlugin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;html-webpack-plugin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;basicApp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;import&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./src/index.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;basicApp.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;build/static&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;devServer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;hot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;open&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.jsx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;module&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\.(&lt;/span&gt;&lt;span class="sr"&gt;js&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt;x&lt;/span&gt;&lt;span class="se"&gt;?&lt;/span&gt;&lt;span class="sr"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;exclude&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sr"&gt;/node_modules/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;use&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                    &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="na"&gt;loader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;babel-loader&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="sr"&gt;css$/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;use&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;style-loader&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;css-loader&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\.(?:&lt;/span&gt;&lt;span class="sr"&gt;ico|gif|png|jpg|jpeg&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt;$/i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;asset/resource&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\.(&lt;/span&gt;&lt;span class="sr"&gt;woff&lt;/span&gt;&lt;span class="se"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;2&lt;/span&gt;&lt;span class="se"&gt;)?&lt;/span&gt;&lt;span class="sr"&gt;|eot|ttf|otf|svg|&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;asset/inline&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;HtmlWebpackPlugin&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./public/index.html&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And make the following change in the &lt;code&gt;package.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scripts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;start&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;webpack serve --mode development&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;build&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;webpack --mode production&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  3- Configure Babel
&lt;/h3&gt;

&lt;p&gt;Now before you try to run the app, configure Babel compiler. Install babel and relevant packages.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;yarn&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;babel&lt;/span&gt;&lt;span class="sr"&gt;/core @babel/&lt;/span&gt;&lt;span class="nx"&gt;preset&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt; &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;babel&lt;/span&gt;&lt;span class="sr"&gt;/preset-react babel-loader --de&lt;/span&gt;&lt;span class="err"&gt;v
&lt;/span&gt;&lt;span class="nx"&gt;yarn&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="nx"&gt;css&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;loader&lt;/span&gt; &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;loader&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;At root of project, create file &lt;code&gt;.babelrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;presets&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@babel/preset-env&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@babel/preset-react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;runtime&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;automatic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You have successfully configured the frontend of your app.&lt;/p&gt;
&lt;h2&gt;
  
  
  Configure Backend
&lt;/h2&gt;

&lt;p&gt;Add Express to the project:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;yarn&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It's your choice whether you set up the backend separately or in the same directory. I set it up in the same dir. Create file &lt;code&gt;backend/server.js&lt;/code&gt; at the root.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;DIST_DIR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;build/static&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;HTML_FILE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;DIST_DIR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;index.html&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;static&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;DIST_DIR&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;HTML_FILE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/ping&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pong&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In dev mode of this set up, frontend runs at &lt;code&gt;localhost:3000&lt;/code&gt; and backend runs at &lt;code&gt;localhost:5000&lt;/code&gt;. Hence, you need to connect frontend to backend so that querying on &lt;code&gt;locahost:3000/api/ping&lt;/code&gt; hits the backend &lt;code&gt;localhost:5000/api/ping&lt;/code&gt;. For this you can configure proxy in &lt;code&gt;webpack.config.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;devServer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;...&lt;/span&gt;
        &lt;span class="nx"&gt;proxy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
           &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nl"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://localhost:3000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://localhost:5000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="nx"&gt;logLevel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;debug&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="cm"&gt;/*optional*/&lt;/span&gt;
           &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now any request of form &lt;code&gt;/api/**&lt;/code&gt; will be directed to port &lt;code&gt;5000&lt;/code&gt;.&lt;/p&gt;
&lt;h1&gt;
  
  
  Run the project
&lt;/h1&gt;

&lt;p&gt;To view output of ping API call, you can make small edit to &lt;code&gt;App.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;logo&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./logo.svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./App.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;pingResponse&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setPingResponse&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pingBackend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/ping&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
        &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nf"&gt;setPingResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;App&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;header&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;App-header&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;logo&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;App-logo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;alt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;logo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;pingBackend&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Ping&lt;/span&gt; &lt;span class="nx"&gt;Backend&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;pingResponse&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Backend&lt;/span&gt; &lt;span class="nx"&gt;Responded&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;{pingResponse}&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;}
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/header&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can run the frontend and backend from two terminals. (Recommended: &lt;a href="https://www.npmjs.com/package/concurrently" rel="noopener noreferrer"&gt;concurrently&lt;/a&gt;)&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//in one terminal&lt;/span&gt;
&lt;span class="nx"&gt;yarn&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt;
&lt;span class="c1"&gt;//in other terminal&lt;/span&gt;
&lt;span class="nx"&gt;yarn&lt;/span&gt; &lt;span class="nx"&gt;build&lt;/span&gt; &lt;span class="c1"&gt;//optional&lt;/span&gt;
&lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="nx"&gt;backend&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcy4h1lzbnzsb3mzevpcf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcy4h1lzbnzsb3mzevpcf.png" alt="App Output" width="800" height="362"&gt;&lt;/a&gt;&lt;br&gt;
We've successfully connected the frontend to backend. You can get the code from my GitHub.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/sanamumtaz" rel="noopener noreferrer"&gt;
        sanamumtaz
      &lt;/a&gt; / &lt;a href="https://github.com/sanamumtaz/react-webpack-backend-proxy" rel="noopener noreferrer"&gt;
        react-webpack-backend-proxy
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Configuring Webpack Dev Server to proxy request from React frontend to Node.js/Express backend.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;Share your thoughts. Feedback's always welcome :)&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>webpack</category>
      <category>node</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Webpack Dev Server External Access - (Fix: Invalid Host Header)</title>
      <dc:creator>Sana Mumtaz</dc:creator>
      <pubDate>Fri, 01 Oct 2021 22:21:58 +0000</pubDate>
      <link>https://dev.to/sanamumtaz/webpack-dev-server-external-access-fix-invalid-host-header-g81</link>
      <guid>https://dev.to/sanamumtaz/webpack-dev-server-external-access-fix-invalid-host-header-g81</guid>
      <description>&lt;p&gt;While developing a React web app in local &lt;code&gt;development&lt;/code&gt; mode, you may want to run the dev mode on mobile or quickly share the web app with another person via a public URL for your localhost (e.g. using &lt;a href="https://ngrok.com/" rel="noopener noreferrer"&gt;ngrok&lt;/a&gt;). For security purposes, you cannot externally access your &lt;code&gt;webpack-dev-server&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;I faced this issue recently and, while I implemented the solution by reading the docs, I found that majority of the solutions in search results were obsolete.&lt;/p&gt;

&lt;h2&gt;
  
  
  Obsolete Solutions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No, making &lt;code&gt;host: '0.0.0.0'&lt;/code&gt; won't work.&lt;/li&gt;
&lt;li&gt;No, &lt;code&gt;disableHostCheck&lt;/code&gt; won't work. It's deprecated.&lt;/li&gt;
&lt;li&gt;No, &lt;code&gt;public&lt;/code&gt; won't work. Deprecated option.&lt;/li&gt;
&lt;li&gt;No, &lt;code&gt;firewall&lt;/code&gt; won't work. Deprecated option.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, how can you access your &lt;code&gt;webpack-dev-server&lt;/code&gt; externally?&lt;/p&gt;

&lt;h1&gt;
  
  
  Solution:
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;✨It's all in the &lt;a href="https://webpack.js.org/configuration/dev-server/#devserverallowedhosts" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.✨&lt;/strong&gt; It's so simple now that it made me feel dumb.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;devServer: {
    allowedHosts: 'auto' | 'all' | Array[string]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Examples:
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; If you're in some hurry, or have no regard for security, or like to live on edge... you may set allowedHosts to &lt;code&gt;'all'&lt;/code&gt;. (Not recommended, though)&lt;br&gt;
&lt;strong&gt;2.&lt;/strong&gt; I use ngrok to make public URLs, hence I listed ngrok sub-domain as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;allowedHosts: ['.ngrok.io']
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The takeaway from this was to, I guess, read latest docs for something that changes rapidly in documentation, instead of browsing search results.&lt;/p&gt;

&lt;p&gt;&lt;small&gt;&lt;em&gt;Share your thoughts. Feedback's always welcome :)&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>webpack</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Python - PDF to JPG &amp; back Converter</title>
      <dc:creator>Sana Mumtaz</dc:creator>
      <pubDate>Thu, 02 Sep 2021 20:49:23 +0000</pubDate>
      <link>https://dev.to/sanamumtaz/python-pdf-to-jpg-back-converter-12pf</link>
      <guid>https://dev.to/sanamumtaz/python-pdf-to-jpg-back-converter-12pf</guid>
      <description>&lt;h1&gt;
  
  
  Motivation
&lt;/h1&gt;

&lt;p&gt;Quite often, I have to submit the same documents in either &lt;code&gt;.pdf&lt;/code&gt; or &lt;code&gt;.jpg/jpeg&lt;/code&gt; format. I used online conversion sites to convert between the two formats. Recently a concern had been lingering in my mind that why am I uploading my personal documents on clouds and shouldn't I just create a converter so that the process stays local on my device. Hence, I decided to make a program to do the conversions.&lt;/p&gt;

&lt;h1&gt;
  
  
  Steps I Took
&lt;/h1&gt;

&lt;h4&gt;
  
  
  - Step 1: Decide framework/language for development
&lt;/h4&gt;

&lt;p&gt;I'd like to include this as a documented step :) The reason is short: I do web development in my day-to-day life, so I decided that coding this small program in Python will be refreshing.&lt;/p&gt;

&lt;h4&gt;
  
  
  - Step 2: Search for packages
&lt;/h4&gt;

&lt;p&gt;You can either implement conversions on your own or you can look for packages that are well-maintained and have a good download count. I chose following packages for conversions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://pypistats.org/packages/pdf2image" rel="noopener noreferrer"&gt;pdf2image&lt;/a&gt; for PDF to JPG conversion.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://pypi.org/project/img2pdf/" rel="noopener noreferrer"&gt;img2pdf&lt;/a&gt; for JPG/JPEG to PDF conversion.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  - Step 3: Make GUI
&lt;/h4&gt;

&lt;p&gt;I used &lt;a href="http://page.sourceforge.net/" rel="noopener noreferrer"&gt;PAGE&lt;/a&gt; to build static GUI. It is a very simple and easy-to-use drag-and-drop GUI generator. I made two GUIs, one for the converter and the other for showing success message. You can also handle all in one.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frh3sttg1io1jux1q35l6.png" alt="JPG to PDF" width="426" height="406"&gt;&lt;/th&gt;
&lt;th&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnb0430q7x2otz6axaka.png" alt="Successful conversion" width="424" height="310"&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;small&gt;&lt;em&gt;Note: tkinter applications look different on different OS. I use Windows. If you want to make application same across all platforms, you can add conditional layouts.&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;After generating scripts from PAGE, I made the GUI dynamic on the basis of &lt;code&gt;conversion_mode&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the &lt;code&gt;conversion_mode == 'jpg'&lt;/code&gt;, then set text accordingly and show entry field for inputting name of output PDF file.&lt;/li&gt;
&lt;li&gt;Similarly, if the &lt;code&gt;conversion_mode == 'pdf'&lt;/code&gt;, then make relevant textual changes. No need to add entry field as the output JPGs will have the PDF's name followed by index.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  - Step 4: Upload Files
&lt;/h4&gt;

&lt;p&gt;I used tkinter's &lt;a href="https://docs.python.org/3/library/dialog.html#module-tkinter.filedialog" rel="noopener noreferrer"&gt;filedialog&lt;/a&gt; module to upload files. I set &lt;code&gt;initialdir&lt;/code&gt; to the directory where script is placed. &lt;code&gt;curr_dir = os.getcwd()&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;u&gt;Upload PDF&lt;/u&gt;: Since single PDF file will be uploaded, hence &lt;code&gt;filedialog.askopenfilename&lt;/code&gt; is used.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;filedialog.askopenfilename(initialdir=curr_dir, title="Select PDF",
                                   filetypes=[("PDF File", "*.pdf")])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;u&gt;Upload JPGs&lt;/u&gt;: Multiple JPG files can be uploaded to create a PDF file, hence &lt;code&gt;filedialog.askopenfilenames&lt;/code&gt; is used.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;filedialog.askopenfilenames(initialdir=curr_dir, title="Select JPG(s)",
            filetypes=[("JPG File", "*.jpeg *.jpg")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  - Step 5: Convert JPG to PDF:
&lt;/h4&gt;

&lt;p&gt;To convert JPG/JPEG files to a single PDF, simply provide &lt;code&gt;file_paths&lt;/code&gt;, which is a list of image file paths, to img2pdf's &lt;code&gt;convert&lt;/code&gt; function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import img2pdf

with open(name+".pdf", "wb+") as file:
        file.write(img2pdf.convert(*file_paths))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;name&lt;/code&gt; is the output PDF name provided by the user.&lt;/p&gt;

&lt;h4&gt;
  
  
  - Step 6: Convert PDF to JPG:
&lt;/h4&gt;

&lt;p&gt;To use &lt;code&gt;pdf2image&lt;/code&gt;, firstly download &lt;code&gt;poppler&lt;/code&gt; on your system. (&lt;a href="https://github.com/Belval/pdf2image#windows" rel="noopener noreferrer"&gt;Instructions&lt;/a&gt;). Since I'm a Windows user, I downloaded poppler and placed the &lt;code&gt;bin/&lt;/code&gt; folder in the same directory as the script.&lt;br&gt;
&lt;code&gt;poppler_path=r"./bin" if (sys.platform == "win32" or sys.platform == "cygwin") else None&lt;/code&gt;&lt;br&gt;
Image files created are stored in &lt;code&gt;output_folder&lt;/code&gt;. To avoid out-of-memory error, I set &lt;code&gt;paths_only=True&lt;/code&gt; so that &lt;code&gt;convert_from_path(...)&lt;/code&gt; doesn't need to return PIL Image objects.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from pdf2image import convert_from_path
from pdf2image.exceptions import (
    PDFInfoNotInstalledError,
    PDFPageCountError,
    PDFSyntaxError
)

convert_from_path(
        file_path,
        output_folder=output_folder_path,
        output_file=output_folder_name,
        fmt="jpg",
        paths_only=True,
        poppler_path=r"./bin" if (sys.platform == "win32" or sys.platform == "cygwin") else None
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can run the function in chunks (&lt;a href="https://stackoverflow.com/a/56483540/10097213" rel="noopener noreferrer"&gt;see&lt;/a&gt;) if the PDF file has hundreds of pages or you want to work on Image object and are concerned about running into OOM error.&lt;/p&gt;

&lt;p&gt;After conversion, I shift the user to different interface where success message is displayed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get the full implementation from my &lt;a href="https://github.com/sanamumtaz/PDF-JPG-Converter" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So this is how I made a PDF ⇌ JPG converter that fulfills my requirements and now I don't have to worry about security/privacy.&lt;/p&gt;

&lt;p&gt;&lt;small&gt;&lt;em&gt;Share your thoughts. Feedback's always welcome :)&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>python</category>
      <category>pdf2image</category>
      <category>img2pdf</category>
    </item>
    <item>
      <title>React Virtualization - react-window vs react-virtuoso</title>
      <dc:creator>Sana Mumtaz</dc:creator>
      <pubDate>Thu, 26 Aug 2021 08:50:25 +0000</pubDate>
      <link>https://dev.to/sanamumtaz/react-virtualization-react-window-vs-react-virtuoso-8g</link>
      <guid>https://dev.to/sanamumtaz/react-virtualization-react-window-vs-react-virtuoso-8g</guid>
      <description>&lt;p&gt;Multiple libraries are available for implementing virtualization in React. &lt;code&gt;react-window&lt;/code&gt; is the widely used library but recently I used &lt;code&gt;react-virtuoso&lt;/code&gt; in a project. Today I'll compare &lt;code&gt;react-window&lt;/code&gt;, &lt;code&gt;react-virtualized&lt;/code&gt;, and &lt;code&gt;react-virtuoso&lt;/code&gt; based on my experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Virtualization
&lt;/h3&gt;

&lt;p&gt;Firstly, I'll briefly explain virtualization/windowing. Suppose you have a large set of data that you render on the UI. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Thousands of items will be rendered on the DOM, even though only a few will be visible on the viewport. Moreover, the items/components, virtual DOM, and real DOM live in memory. Hence, this will cost you both performance and memory.&lt;/li&gt;
&lt;li&gt;Inspecting a DOM with thousands of nodes will cost you peace of mind. :)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The efficient approach will be to create and render only those items that are visible on viewport. This is where virtualization comes in. It is &lt;em&gt;the technique of creating a window in which components mount/unmount depending upon their visibility on viewport, as the user scrolls.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1- &lt;code&gt;react-virtualized&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/bvaughn/react-virtualized" rel="noopener noreferrer"&gt;react-virtualized&lt;/a&gt; is the elder and bulkier brother (same author) of &lt;code&gt;react-window&lt;/code&gt;. It contains more components, features, and has a much larger package size compared to the lighter react-window. The package comes with 2D components, features like infinite scroll, autosizer, etc.&lt;/p&gt;

&lt;p&gt;One must analyze one's project requirements to determine whether they need to use the bulky react-virtualized for the features it provides or react-window will suffice. Since I didn't need so much functionality in my virtualized lists, I initially opted for &lt;code&gt;react-window&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Package size: 27.4 KB&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2- &lt;code&gt;react-window&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;As the author has &lt;a href="https://github.com/bvaughn/react-window#how-is-react-window-different-from-react-virtualized" rel="noopener noreferrer"&gt;mentioned&lt;/a&gt;, react-window is a complete rewrite of react-virtualized and the focus was to make the package smaller and faster. react-window is light-weight and comes with basic List and Grid components. It does lack some features, for example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Infinite scroll i.e. lazy loading is not supported. But you can use &lt;code&gt;react-window-infinite-loader&lt;/code&gt; package with it to achieve the result. &lt;a href="https://codesandbox.io/s/5wqo7z2np4" rel="noopener noreferrer"&gt;Code Sandbox Demo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Autosizer can be implemented using &lt;code&gt;react-virtualized-auto-sizer&lt;/code&gt; package. Autosizer automatically adjusts the width and height of list item, letting it fill the available space without providing explicit dimensions. &lt;a href="https://codesandbox.io/s/3vnx878jk5" rel="noopener noreferrer"&gt;Code Sandbox Demo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In order to render items with variable sizes in react-window, you'll need to write a bunch of code, which is a hassle. The issue is that the item is not rendered yet, so you can't really go to the DOM to get the actual height/width. Hence for dimension calculation, you'd need to temporarily render item in a way that is not visible to the user. See &lt;a href="https://codesandbox.io/s/react-chat-simulator-yg114?file=/src/ChatRoom/Room/Messages/Messages.js" rel="noopener noreferrer"&gt;this&lt;/a&gt; Code Sandbox example.&lt;/p&gt;

&lt;p&gt;Considering you have implemented variable size lists, what if you now have a use case in which the item size can grow after render. There is no such support in react-window and the item content will overflow.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Package size: 6.2 KB&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3- &lt;code&gt;react-virtuoso&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/petyosi/react-virtuoso" rel="noopener noreferrer"&gt;react-virtuoso&lt;/a&gt; is a relatively new package for virtualization, published first two years ago. It comes with all the necessary features and support that one might eventually require in a developing project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No need to configure item size, optional prop.&lt;/li&gt;
&lt;li&gt;Available features like infinite scroll, sticky headers, pinned items, window resize observer, autosizer, etc. (See &lt;a href="https://github.com/petyosi/react-virtuoso" rel="noopener noreferrer"&gt;docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;You don't need to handle anything regarding changing item size.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since I needed to render items with textarea that could expand in size, I couldn't continue using react-window. Implementation using react-virtuoso was super easy. Here is a demo example:&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/react-virtuoso-increasing-size-items-esdng"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Package size: 15.7 KB&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Based on my experience, I'll compile the comparison as follows:&lt;br&gt;
1- &lt;strong&gt;Package Type&lt;/strong&gt;: Both &lt;code&gt;react-virtualized&lt;/code&gt; and &lt;code&gt;react-window&lt;/code&gt; are JavaScript packages, with type declaration packages available. &lt;code&gt;react-virtuoso&lt;/code&gt; is a TypeScript package.&lt;br&gt;
2- &lt;strong&gt;Package Size&lt;/strong&gt;: &lt;code&gt;react-window&lt;/code&gt; is the smallest package amongst the three, but &lt;code&gt;react-virtuoso&lt;/code&gt; has a good size considering the features it provides.&lt;br&gt;
3- &lt;strong&gt;Features&lt;/strong&gt;: &lt;code&gt;react-virtuoso&lt;/code&gt; comes with all the necessary features that you can possibly require in a developing project. But in &lt;code&gt;react-window&lt;/code&gt;, you'll have to add packages to gain the functionalities.&lt;br&gt;
4- &lt;strong&gt;Coding/Configuration&lt;/strong&gt;: You have to write more code in &lt;code&gt;react-window&lt;/code&gt;, providing itemSize, style, etc. &lt;code&gt;react-virtuoso&lt;/code&gt; requires a very few props and has a simpler configuration.&lt;br&gt;
5- &lt;strong&gt;Documentation&lt;/strong&gt;: I find the documentation of &lt;code&gt;react-virtuoso&lt;/code&gt; the best. It is well-structured and detailed. Proper example code is provided, compared to &lt;code&gt;react-window&lt;/code&gt; where comments tell you to implement calculation on your own.&lt;/p&gt;

&lt;p&gt;In conclusion, I will say that you should first analyze your project requirements and then decide which package fits best. Personally, I use &lt;code&gt;react-virtuoso&lt;/code&gt; in my projects and I recommend others to try the package to see its advantages.&lt;/p&gt;

</description>
      <category>react</category>
      <category>virtualization</category>
      <category>webdev</category>
      <category>frontenddev</category>
    </item>
  </channel>
</rss>
