**Instalamos **webpack para el bundle de la app, y babel para que el código sirva en cualquier navegador

npm install @babel/core @babel/preset-env @babel/preset-react 
npm install webpack webpack-cli webpack-dev-server 
npm install babel-loader html-loader html-webpack-plugin

Es buena práctica al momento de trabajar con npm, añadir el flag "-D*"* como dependencia de desarrollo

babel core ⇒ núcleo de babel

babel/preset-env ⇒ para que javascript y las nuevas funcionalidades funcionen en cualquier navegador

babel/preset-react ⇒ para que react funcione en cualquier navegador

webpack y webpack-cli ⇒ bundler del proyecto

webpack-dev-server ⇒ inicializar un servidor en local para mostrar en modo producción o desarrollo nuestra aplicación

loaders y plugin ⇒ sirven para optimizar o extraer html de los archivos (i.e React)

Archivos de configuración

node_modules
// .gitignore
{
    "presets": [
        "@babel/preset-env",
        "@babel/preset-react"
    ]
}
//.babelrc
const path = require('path'); //path del proyecto principal
const HtmlWebpackPlugin = require('html-webpack-plugin'); //traemos el plugin
//de html

module.exports = {
    entry: './src/index.js', // punto de entrada
    output: { // lugar al que saldrán todos los archivos
        path: path.resolve(__dirname, 'dist'), //en nuestro path, crea la carpeta dist
        filename: 'bundle.js' // nombre del archivo js resultante
    },
    resolve: { // extensión de archivos a tomar en cuenta
        extensions: ['.js', '.jsx']
    },
    module: { // loaders para cada tipo de archivo
        rules: [ // reglas para usar
            {
                test: /\\.(js|jsx)$/, // extensiones en las cuales actuará babel
                exclude: /node_modules/, // siempre excluir node modules 
                use: { // indicamos el loader
                    loader: 'babel-loader' // babel 
                }
            },
            {
                test: /\\.html$/, // extensiones html
                use: [
                    {
                        loader: 'html-loader' // loader para usar
                    }
                ]
            }
        ]
    },
    plugins: [ // plugins 
        new HtmlWebpackPlugin({ // instanciamos el plugin para html 
            template: './public/index.html', // archivo raíz a transformar
            filename: './index.html' // el archivo resultante
        })
    ]
}
// webpack.config.js

es buena práctica usar los nombres dist o bundle, pues en la industria se usan como estándar