In this article, you will learn about how to deploy a React app smoothly using the GitHub page. So, let’s begin.
Prerequisites:
- First of all, you need a GitHub account,
- Download and install Git on your machine, then set it up
- Node.js and npm installed in your machine (14.18.0 includes npm 6.14.15) versions are accepted)
How to Install Create-React App:
- In order to install your react app, first go to your workspace and run the following command in the Terminal:
npx create-react-app my-funcy-app
- 
Then go to the project repo where your app was installed: 
cd my-funcy-app
- 
Last but not least run the following command to see your app on the browser: 
npm run start
If you see something like this in the localhost browser you are good to go 👾.
Keep reading…
Before deployment, you should add your project to GitHub using the command line:
- 
Create a new repository on GitHub. 
- 
Open your terminal. 
- 
Initialize the local directory as a Git repository: git init
- 
Add the files to your new local repository: git add .
- 
Commit the files that you’ve staged in your local repository: git commit -m "initial commit"
- 
Copy the HTTPS URL of your newly created repo 
- In the Command prompt, add the URL for the remote repository where your local repository will be pushed.
git remote add origin remote repository URL
then git remote -v 
- Push the changes in your local repository to GitHub using the following command :
git push -f origin master
That is all, your project is linked remotely with GitHub repo.
Deployment:
Now after you build your beautiful app, it's time to share it with the world. So let’s deploy your React app to GitHub pages:
Go back to your terminal and run this command to install gh-pages as “dev-dependency”, which will allow you to create a new branch on your GitHub repo:
npm install gh-pages — save-dev
After that, go to your package.json file in your root directory and add the homepage property at the top level.
"homepage": "https://username.github.io/repository-name",
In my case, the package.json file now looks like this:
Still in your package.json file and add those two lines in the scripts property:
“predeploy”: “npm run build”,
“deploy”: “gh-pages -d build”
In my case my scripts look like that:
Save package.json, and run the following command to deploy it to GitHub Pages:
npm run deploy
Now if you switch to your GitHub repository and then Settings -> GitHub pages section you will be able to see the URL that you assigned to the homepage property in your package.json
Congratulations 🎉! you have successfully deployed your react App using the GitHub page.
If you are getting a 404 error in your browser after clicking on the URL, keep reading.
React Router Issue solution:
Don’t worry about that; we have solutions for this issue 😉. Keep going.
If you are  doing routing in your app using BrowserRoute from react-router-dom 
import { BrowserRoute as Router } from "react-router-dom"
You will face the 404 error page mentioned above. Because the gh-pages don't support client-side routers that use the HTML5 history.
Solution: So to solve this issue there are two ways that you can take to deploy your application either by replacing the BrowserRouter to HashRouter so you have:
import { HashRouter as Router } from "react-router-dom"
So your code will be like the following:
<Router>
  <App />
</Router>
Or by another method. You can set a 404.html file in your /public folder, so let’s go extensively with this method:
Go back now to your App.js and rechange the Router type to the BrowserRouter and still in the same file to update Router component by adding a basname prop to get dynamically repository name, because as you remember you specified the homepage in your package.json :
<Router basename={process.env.PUBLIC_URL}>
  <App />
</Router>
That is the first path, you're almost done.
Now go to your /public folder,  create a 404.html file and add this code from this repo. Be sure that pathSegmentsToKeep in line 26 is setting to 1 and save the file.
Now, copy lines 9-21 from this repo. and paste it in your /public/index.html file above the close tag </head>.
And you are good to go now with your deployment.
Congratulations!
Thanks for reading! I hope this article was helpful for you.
