In the previous part, we already setup react from scratch, but it is not totally complete, we can’t add CSS files for styling and assets. So therefore in this part, we will finish our webpack configuration
Update webpack configuration
Styling configuration
To make a website more beautiful, we need CSS files to set colors, typography, layout, etc. So we need to add a new configuration to our webpack to read CSS files.
We need two package
style-loaderused for adding CSS files into components.css-loaderused to make components can read CSS files
pnpm install --save-dev style-loader css-loaderCreate CSS files
- Create files
index.csswith any style, in this case, my styling like this
.title {
font-size: 36px;
color: pink;
}- Import file
index.csskedalam komponen utama yaituindex.jsxagar komponent tersebut dapat menerapkan styling yang sudah ada. - Import file
index.cssto the root componentindex.jsx
import React from "react";
import reactDom from 'react-dom/client';
// import CSS
import "./index.css";
const App = () => {
return (
<div>
{/* applying styling to the classname */}
<h1 className="title">Hello world</h1>
</div>
);
};
const root = reactDom.createRoot(document.getElementById('root'));
root.render(<App />);Configuration assets on Webpack
const path = require("path");
const htmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
mode: "development",
entry: path.resolve(__dirname, "./index.jsx"),
output: {
path: path.resolve(__dirname, "./build"),
filename: "index.js",
clean: true,
},
resolve: {
extensions: [".js", ".jsx"],
},
module: {
rules: [
{
test: /\\\\.(js)x?$/,
exclude: /node_modules/,
use: [
{
loader: "babel-loader",
},
],
},
{
test: /\\\\.css$/,
use: ["style-loader", "css-loader"],
},
// configuration for images
{
test: /\\\\.(png|svg|jpg|jpeg|gif)/i,
type: "asset/resource",
generator: {
filename: "assets/img/[hash][ext][query]",
},
},
// end of configuration for images
],
},
plugins: [
new htmlWebpackPlugin({
template: path.resolve(__dirname, "./index.html"),
}),
],
};testallowed file extensionstypewhat module should usegeneratorakan menghasilkan sebuah file kedalam sebuah folder yang sudah di tentukan.generatorwill generate a result of the file and will be in the defined path
After adding that configuration, we should add an image to the component and run pnpm build to test whether our image was successful, and if successful, it will automatically create a new image file in path build/assets/img/nama_file_hash.png
import React from "react";
import reactDom from 'react-dom/client';
import Logo from "./assets/logo.png";
import "./index.css";
const App = () => {
return (
<div>
<h1 className="title">Hello world</h1>
{/* add new image */}
<img src={Logo} alt="logo-react" />
</div>
);
};
const root = reactDom.createRoot(document.getElementById('root'));
root.render(<App />);
The last step is should run pnpm start to check are our applied styling and assets can work as expected on the website
Conclusion
In this stage, we can use React like what React templates do, we can add styling and assets to each page on the website.
Setup React from scratch part 1
You can access the code in this repository
