Table of Contents
- Prerequisites
- Installing Node.js and npm
- Creating a New React Project with Create React App
- Understanding the Project Structure
- Running the Development Server
- Key Features of Create React App
- Customizing Your React App
- Building for Production
- Troubleshooting Common Issues
- References
Prerequisites
Before we begin, ensure you have the following tools installed on your machine:
- Node.js: React projects rely on Node.js (a JavaScript runtime) and
npm(Node Package Manager) for managing dependencies. - A Code Editor: We recommend Visual Studio Code (VS Code) with extensions like ESLint and React Developer Tools for a smoother experience.
Installing Node.js and npm
Create React App requires Node.js (v14.0.0 or later) and npm (v5.6 or later). If you don’t have them installed:
Step 1: Download Node.js
Visit the official Node.js website and download the LTS (Long Term Support) version (recommended for stability).
Step 2: Verify Installation
After installation, open your terminal (Command Prompt, PowerShell, or Terminal) and run these commands to check versions:
node -v # Should output v14.0.0 or higher
npm -v # Should output v5.6.0 or higher
If you see errors, reinstall Node.js or troubleshoot your PATH configuration.
Creating a New React Project with Create React App
With Node.js and npm installed, you can create a React project in seconds using npx (a tool that runs npm packages without global installation).
Step 1: Run the Create React App Command
In your terminal, navigate to the folder where you want to create your project (e.g., Documents/Projects), then run:
npx create-react-app my-react-app
npx: Executes thecreate-react-apppackage temporarily (no need to install it globally).create-react-app: The official package name.my-react-app: Your project name (replace with your desired name, e.g.,portfolio-app).
Step 2: Wait for Installation
CRA will download dependencies, set up the project structure, and configure build tools. This may take 1–3 minutes, depending on your internet speed.
Step 3: (Optional) Create a TypeScript Project
If you prefer TypeScript (a typed superset of JavaScript), add the --template typescript flag:
npx create-react-app my-react-app --template typescript
Understanding the Project Structure
Once the installation finishes, navigate into your project folder:
cd my-react-app
Open the folder in VS Code (or your editor) to explore the structure:
my-react-app/
├── node_modules/ # Dependencies (auto-generated, don’t edit)
├── public/ # Static files (served directly)
│ ├── index.html # HTML template (React renders here)
│ ├── favicon.ico # App icon
│ └── manifest.json # PWA configuration
├── src/ # Source code (your React app lives here)
│ ├── index.js # Entry point (renders App to the DOM)
│ ├── App.js # Root component
│ ├── App.css # Styles for App component
│ ├── App.test.js # Test file for App
│ ├── logo.svg # Default React logo
│ └── serviceWorker.js # PWA service worker (optional)
├── .gitignore # Files Git should ignore (e.g., node_modules)
├── package.json # Project metadata and scripts
└── README.md # CRA documentation
Key Files Explained:
public/index.html: The only HTML file in the project. React injects your app into the<div id="root"></div>element here.src/index.js: The “entry point” of your app. It importsAppand renders it into therootdiv usingReactDOM.createRoot.src/App.js: The root React component. Modify this to change your app’s UI.
Running the Development Server
To preview your app locally, run the development server:
npm start
This will:
- Start a local server at
http://localhost:3000. - Open your app in the default browser (if not, manually visit
localhost:3000). - Enable hot reloading: Changes to your code will auto-refresh the browser—no need to manually reload!
You’ll see the default React welcome screen with a rotating logo.
Key Features of Create React App
CRA comes with powerful tools pre-configured. Here are the most useful ones:
1. Hot Reloading
As mentioned, edits to src/ files update the browser instantly without losing state.
2. Built-in Linting
CRA uses ESLint to catch code errors and enforce style rules. Errors appear in the terminal and browser console (e.g., unused variables, missing imports).
3. Testing with Jest & React Testing Library
Run tests with:
npm test
This launches Jest (a testing framework) and React Testing Library (for component tests). By default, it runs src/App.test.js, which checks if the app renders correctly.
4. PWA Support
CRA includes a serviceWorker.js file to turn your app into a Progressive Web App (PWA), enabling offline access and installable shortcuts (via manifest.json).
5. Environment Variables
Store secrets or configuration (e.g., API keys) in .env files. Prefix variables with REACT_APP_ to access them in your code:
# .env file
REACT_APP_API_URL=https://api.example.com
Use in components:
console.log(process.env.REACT_APP_API_URL); // Logs "https://api.example.com"
Customizing the Project
Let’s personalize your app by modifying the default code.
Step 1: Update the App Title
Open public/index.html and change the <title> tag:
<title>My Awesome React App</title>
Step 2: Modify App.js
Replace the default src/App.js with a simpler version:
import './App.css';
function App() {
return (
<div className="App">
<h1>Hello, React!</h1>
<p>My first React app with Create React App 🚀</p>
</div>
);
}
export default App;
Save the file—the browser will auto-refresh to show your changes!
Step 3: Add a New Component
Create a src/components folder, then add Greeting.js:
// src/components/Greeting.js
export default function Greeting({ name }) {
return <h2>Welcome, {name}!</h2>;
}
Import and use it in App.js:
import Greeting from './components/Greeting';
function App() {
return (
<div className="App">
<h1>Hello, React!</h1>
<Greeting name="Alice" /> {/* Renders "Welcome, Alice!" */}
</div>
);
}
Building for Production
When your app is ready to deploy, create an optimized production build:
npm run build
CRA will generate a build/ folder with minified HTML, CSS, and JavaScript. This folder is production-ready—upload it to a hosting service like Netlify, Vercel, or AWS S3.
Testing the Production Build Locally
To preview the build, install the serve package (a static server) and run:
npm install -g serve
serve -s build
Visit http://localhost:3000 to see your optimized app.
Troubleshooting Common Issues
Issue 1: “Port 3000 is already in use”
Another app is using port 3000. Fix it by specifying a new port:
PORT=3001 npm start # Uses port 3001
Issue 2: “Node.js version is too old”
CRA requires Node.js ≥14.0.0. Update Node.js via the Node.js website.
Issue 3: npm install Fails
Delete node_modules and package-lock.json, then reinstall dependencies:
rm -rf node_modules package-lock.json
npm install
References
- Create React App Official Documentation
- Node.js Download
- React Official Docs
- TypeScript with CRA
- Deploying a CRA App
By following this guide, you’ve set up a React project, explored its structure, and learned to customize and deploy it. CRA’s zero-configuration approach lets you focus on building—happy coding! 🚀