React - A JavaScript library for building user interfaces
Create React App - Simple
Create new directory and change to directory that you create
mkdir reactapp
cd reactapp
Init node package
Install webpack
npm i --save-dev \
webpack-cli \
webpack-dev-server \
path
Create a new file webpack.config.js
const path = require ( "path" ) ;
module . exports = {
mode : "development" ,
entry : "./src/index.js" ,
output : {
path : path . resolve ( __dirname , "public" ) ,
filename : "main.js"
} ,
target : "web" ,
devServer : {
port : "9500" ,
static : [ "./public" ] ,
open : true ,
hot : true ,
liveReload : true
} ,
}
Create 2 directory
Create file index.html to public directory and add 2 line in body
< div id ="root "> </ div >
< script src ="main.js "> </ script >
Config start, build to package.json
"scripts" : {
"start" : " webpack-dev-server" ,
"build" : " webpack"
},
Add module to webpack.config.js
resolve: {
extensions : [ '.js' , '.jsx' , '.json' ]
} ,
module :{
rules : [
{
test : / \. ( j s | j s x ) $ / ,
exclude : / n o d e _ m o d u l e s / ,
use : 'babel-loader'
} ,
]
}
Create a new file .babelrc
{
"presets" : [
"@babel/preset-env" ,
"@babel/preset-react"
] ,
"plugins" : [
"@babel/plugin-transform-runtime"
]
}
Install babel
npm i --save-dev \
babel-loader \
@babel/preset-env \
@babel/plugin-transform-runtime \
@babel/preset-react
Install react
Testing Library
npm i -g jest-cli \
&& npm i --save-dev \
jest-environment-jsdom \
@testing-library/jest-dom \
@testing-library/react
Create a new file jest.config.js
module . exports = {
testEnvironment : 'jsdom' ,
}
Install react, webpack, babel, linters, path, loader dependencies
npm init -y \
&& npm i react react-dom prop-types \
&& npm i --save-dev \
webpack-cli \
webpack-dev-server \
babel-loader \
@babel/preset-env \
@babel/plugin-transform-runtime \
@babel/preset-react \
path \
style-loader \
css-loader \
jest-environment-jsdom \
@testing-library/jest-dom \
@testing-library/react \
&& npm i -g jest-cli
Create a new file webpack.config.js
const path = require ( "path" ) ;
module . exports = {
mode : "development" ,
entry : "./src/index.js" ,
output : {
path : path . resolve ( __dirname , "public" ) ,
filename : "main.js"
} ,
target : "web" ,
devServer : {
port : "9500" ,
static : [ "./public" ] ,
open : true ,
hot : true ,
liveReload : true
} ,
resolve : {
extensions : [ '.js' , '.jsx' , '.json' ]
} ,
module :{
rules : [
{
test : / \. ( j s | j s x ) $ / ,
exclude : / n o d e _ m o d u l e s / ,
use : 'babel-loader'
} ,
{
test : / \. c s s $ / i,
use : [ "style-loader" , "css-loader" ] ,
} ,
]
}
}
Create a new file .babelrc
{
"presets" : [
"@babel/preset-env" ,
"@babel/preset-react"
] ,
"plugins" : [
"@babel/plugin-transform-runtime"
]
}
Create a new file jest.config.js
module . exports = {
testEnvironment : 'jsdom' ,
}
Config start, build, test scripts to package.json
"scripts" : {
"start" : " webpack-dev-server" ,
"build" : " webpack" ,
"test" : " jest --watch"
},
Create 2 directory
Create file index.html to public directory
<!DOCTYPE html>
< html lang ="en ">
< head >
< meta charset ="UTF-8 ">
< meta http-equiv ="X-UA-Compatible " content ="IE=edge ">
< meta name ="viewport " content ="width=device-width, initial-scale=1.0 ">
< title > React</ title >
</ head >
< body >
< div id ="root "> </ div >
< script src ="main.js "> </ script >
</ body >
</ html >
Create index.js to src directory
import React from "react"
import { createRoot } from "react-dom/client"
const App = ( ) => {
return < div > Hello World</ div >
}
const el = document . getElementById ( "root" )
const root = createRoot ( el )
root . render ( < App /> )