react-script, webpack and babel stuff.
Published: 2023-10-31 03:55:06

Webpack and Create React App (often referred to as "react-scripts") are both tools used in web development, but they serve different purposes and have different scopes:

1. **Webpack**:
   - **Purpose**: Webpack is a powerful and flexible JavaScript module bundler. It's used to bundle, optimize, and manage assets for a web application, including JavaScript files, CSS files, images, and more.
   - **Use Cases**: You typically use Webpack when you need fine-grained control over how your assets are bundled, want to set up custom build configurations, or need to bundle various types of files beyond just JavaScript.
   - **Configuration**: Webpack requires you to create a webpack configuration file (commonly named webpack.config.js) where you define how your assets should be processed and bundled.

2. **Create React App (react-scripts)**:
   - **Purpose**: Create React App is a tool that simplifies the process of setting up and developing React applications. It's designed to get you up and running quickly without the need for complex build configurations.
   - **Use Cases**: Create React App is great for beginners or for projects where you want a straightforward development setup. It abstracts away the Webpack configuration, Babel setup, and other build-related complexities.
   - **Configuration**: While Create React App offers some limited configuration options, it's intentionally opinionated to keep things simple. If you need more advanced customization, you may "eject" from Create React App, which exposes the Webpack configuration for further modification.

In summary, Webpack is a general-purpose module bundler and build tool that can be used for any web application, while Create React App, or "react-scripts," is a specialized tool for quickly setting up and developing React applications with a predefined, opinionated build configuration. The choice between them depends on your project's requirements and your familiarity with build tooling and configuration.

> react-scripts abstracts away the Webpack configuration, Babel setup, and other build-related complexities

When we say that "react-scripts abstracts away the Webpack configuration, Babel setup, and other build-related complexities," it means that Create React App (often referred to as "react-scripts") provides a simplified and pre-configured development environment for React applications, hiding the intricate details of certain tools like Webpack and Babel from the developer.

Here's a breakdown of what this abstraction means:

1. **Webpack Configuration**:
   - Webpack is a powerful but complex tool that requires a configuration file to specify how your project's assets (JavaScript files, CSS, images, etc.) should be bundled and processed.
   - Create React App comes with a pre-configured Webpack setup, so you don't need to write or understand the Webpack configuration. It has sensible defaults that work for most React projects.

2. **Babel Setup**:
   - Babel is a JavaScript compiler that allows developers to write modern JavaScript (ES6/ES7) and have it transpiled into code that can run in older browsers.
   - Create React App includes a Babel configuration that supports modern JavaScript features, so you can write modern React code without worrying about configuring Babel presets and plugins.

3. **Other Build-Related Complexities**:
   - In addition to Webpack and Babel, modern web development often involves various other tools and configurations for tasks like minification, hot-reloading, and code splitting.
   - Create React App abstracts these complexities by providing a sensible default setup that works well for most development scenarios. It's designed to reduce the initial learning curve and save time.

In essence, by abstracting away these complexities, Create React App allows developers to focus on writing React code and building features rather than spending time configuring and fine-tuning build tools. It's an excellent choice for beginners and for projects where a quick and hassle-free setup is desired. However, for more advanced or highly customized projects, you might need to eject from Create React App to gain direct control over the underlying build configurations.

> But sooner or later, developers will need to optimize code and configuration for performance. Will react-script useful anymore?

You're absolutely right that as a project grows or requires specific optimizations, developers may find the need to customize their build configurations for performance or other reasons. In such cases, Create React App (react-scripts) may become less suitable, as its main goal is to simplify the initial setup and development experience.

Here's what developers commonly do when they need more advanced optimizations:

1. **Eject from Create React App**:
   - Create React App provides a script called `eject` that allows you to "eject" from its simplified setup. This action reveals the underlying Webpack and Babel configurations, giving you full control.
   - After ejecting, you can modify the Webpack configuration, install additional plugins, or make other customizations to optimize the build for performance.

2. **Custom Configuration**:
   - Some projects start with Create React App for the ease of setup and development and later transition to a custom configuration when specific optimizations are required.
   - In this approach, developers retain the benefits of Create React App during initial development and then gradually introduce customizations as needed.

3. **Alternative Configurations**:
   - Developers can choose alternative tools or configurations from the beginning if they anticipate complex performance requirements. For example, they might set up Webpack and Babel configurations manually or use tools like Next.js or Gatsby, which offer more control over build processes.

In summary, while Create React App is excellent for getting started quickly and simplifying development, it's not a one-size-fits-all solution. Developers have options to transition to more customized build configurations when performance optimizations or other advanced requirements become necessary. This allows projects to evolve and adapt to changing needs without being limited by the initial abstraction provided by Create React App.