Tools covered by https://www.udemy.com/course/react-2nd-edition/learn/lecture/7707740, in the order they're introduced.
A web server
live-server public
Compile modern stuff to shippable javascript
- Env preset = ES6
- React preset
babel src/app.js --out-file=public/scripts/app.js --presets=env,react --watch
Create yarn run commands for each step, e.g. yarn run build.
package.json, with webpack:
  "scripts": {
    "build": "webpack",
    "dev-server": "webpack-dev-server"
  },When using webpack, you don't need to run babel directly, and with webpack-dev-server, you don't need to run live-server and webpack --watch separately.
package.json, without webpack
  "scripts": {
    "build-babel": "babel src/app.js --out-file=public/scripts/app.js --presets=env,react --watch",
    "serve": "live-server public",
  },Combine javascript into a single resource
webpack.config.js:
const path= require('path');
module.exports = {
    entry: './src/app.js',
    'output': {
        path: path.join(__dirname, 'public'),
        filename: 'bundle.js'
    },
    'module': {
        rules: [{
            loader: 'babel-loader',
            test: /\.js$/,
            exclude: /node_modules/
        }]
    },
    'devtool': 'cheap-module-eval-source-map',
    'devServer': {
        contentBase: path.join(__dirname, 'public')
    }
};contentBase is only needed when serving static files.
We're replacing the babel CLI with babel core, so we need a .babelrc file:
{
    "presets": ["@babel/preset-env", "@babel/preset-react"]
}We now explicitly define dependencies in the package.json, so need to yarn add all of these:
- react
- react-dom
- @babel/core
- babel-loader
- @babel/preset-env
- @babel/preset-react
(Note: all babel packages have been changed from babel-foo to @babel/foo in v7)
There are two webpack loaders that work together for CSS, style-loader (which injects CSS into the page as <style> tags) and css-loader, which lets you use imports to show dependencies between CSS and Javascript files.
sass-loader and node-sass compile SASS/SCSS to CSS.
Rule for webpack.config.js:
          {
              test: /\.scss$/,
              loader: ['style-loader', 'css-loader', 'sass-loader']
          }
The order matters. If you reverse style-loader and css-loader, webpack gives a cryptic error.