elpddev
elpddev

Reputation: 4484

Development server of create-react-app does not auto refresh

I am following a tutorial on React using create-react-app. The application is created by create-react-app v1.3.0

create-react-app my-app

The dev server is run by

npm start

After changing the code several times, the browser is not updated live / hot reload with the changes. Refreshing the browser does not help. Only stopping the dev server and starting it over again capture the new changes to the code.

Upvotes: 153

Views: 247095

Answers (30)

Felipe Spengler
Felipe Spengler

Reputation: 43

To anyone using Windows that none of the previous answers worked: make sure to check your directory path

The directories path should NOT HAVE:

  • Any space
  • Special Characters like ! or #

I had this issue (webpack was also showing "Compiling with 1 error" on console) because one of my directories was starting with #.

You don't need to reinstall anything, just close your editor, fix the incorrect directory, and open the project again on your editor from the new folder path, and live reload should work now.

Upvotes: 0

Vaibhav Moradiya
Vaibhav Moradiya

Reputation: 31

I am using React in the Yarn workspace with CRACO & TypeScript. Adding transpileOnly option worked for me.

{
       test: /\.ts$/,
       use: {
              loader: 'ts-loader',
              options: {
                    transpileOnly: true,
              },
       },
}

Upvotes: 0

Jothy
Jothy

Reputation: 131

change the start

"scripts": {

"start": "export PORT=4000 && react-scripts start -w",
"build": "GENERATE_SOURCEMAP=false react-scripts --max_old_space_size=8068 build",
"buildWin": "react-scripts --max_old_space_size=4096 build",
"test": "react-scripts test",
"eject": "react-scripts eject"

},

Upvotes: 0

Adam
Adam

Reputation: 785

I had a similar problem and found a rather simple solution. Turns out I didn't ctrl + S my work. Make sure to turn on auto save in the code editor. It compiled my react project after every change I made and displayed those changes on my browser.

Upvotes: 0

Kev
Kev

Reputation: 1757

I was reading a lot of unnecesary stuff.

I am using React 17.

And my problem was that the page just add new components but the browser was not refreshing the page.

If your terminal is Compiling... and then you don't see changes on the browser, you should try adding a .env file in the root path of the project and add FAST_REFRESH=false.

Hot refresh was replaced by Fast refresh by default.

Upvotes: 160

shashin
shashin

Reputation: 51

I had to run npm build everytime I wanted to refresh the app. Reinstalling node and npm didn't help. The project used a build tool called Parcel. Deleting the auto generated files such as .parcel-cache and dist resolved the issue for me.

My solution was to delete auto generated untracked/ignored files. The following git command might help: git status --ignored

Upvotes: 0

Mohit Saud
Mohit Saud

Reputation: 115

If you are using visual studio code, you can create a new file and save it as .env. Inside, .env write FAST_REFRESH=false and save. Then, run npm start and this worked for me.

Upvotes: 4

jbdev
jbdev

Reputation: 751

As of react-scripts version 5.x.x CHOKIDAR_USEPOLLING=true no longer works in a .env file. You now need to use WATCHPACK_POLLING=true in the .env file in the root of your project. Per this thread.

Upvotes: 8

Raj
Raj

Reputation: 51

I tried all the above suggestions, but still my react app does not refresh on code changes. Then I copied the previously working react project folder (only frontend) pasted it into the new project I am starting. Removed all the code related to old project and started using it. This solved my problem.

If this is feasible for you, you too can adopt the same method. If anyone discover a new simple solution, please post it here.

Upvotes: 0

dylzee
dylzee

Reputation: 421

I ended up here seeking answers to a similar issue. Although mine was specific to one page that wasn't hot reloading. I do want to point out this is using Nextjs and it was a page under /pages named subscribe.js (/pages/subscribe.js)

It was very frustrating and admittedly took a while to figure out.

A lot of technical answers here, but interestingly, my issue was that my functional component did not start with a capital letter.

import React from 'react'

export default function subscribe() {
  return (
    <div>
      
    </div>
  )
}

Where the function name needed to start with a capital like so

import React from 'react'

export default function Subscribe() {
  return (
    <div>
      
    </div>
  )
}

As they say, you learn something new every day. In this game it's more like 10 things, the trouble is remembering what you learn ;)

Upvotes: 1

nirbhau
nirbhau

Reputation: 42

In case people come here looking for a better solution, my issue was resolved by moving my files inside the WSL2 filesystem. Hot reloading worked straight away with no need to add an .env file.

Upvotes: 3

Alexander Suleymanov
Alexander Suleymanov

Reputation: 113

Watch out where you add your .env file to. When you call create-react-app app-name, React will add following folder structure:

./root
   ./app-name
      ./node_modules
      ./public
      ./src
      package.json
      README.md

My problem was, I added .env file (with FAST_REFRESH=false inside) under the ./root directory. Placing the file in my ./app-name folder solved the issue.

Upvotes: 0

Youssef Zidan
Youssef Zidan

Reputation: 350

just create .env file in the root of your app and add the following to it

.env

FAST_REFRESH=false

Upvotes: 9

oyerohabib
oyerohabib

Reputation: 395

I was confused about how to create a .env file and even when i did it still didn't work. I was able to fix the issue by running this command on my terminal.

npm run start -FAST_REFRESH=false

Hopes it helps someone.

Upvotes: 1

Ambitious Intern
Ambitious Intern

Reputation: 341

For users of WSL2, be mindful that if your project is in your Windows System(ie C: or D:) then it won't work.

Solution 1:

access these files through the WSL share, \wsl$\DISTRO_NAME from Windows.

Solutions 2:

Inside your package.json

find

"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  }

and replace it with

"scripts": {
    "start": "CHOKIDAR_USEPOLLING=true react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  }

Credits to https://github.com/facebook/create-react-app/issues/10253

Upvotes: 4

Manohar Reddy Poreddy
Manohar Reddy Poreddy

Reputation: 27395

Spent few hours fixing this:


1 . Create a file .env (beside package.json file) add below contents:

File: .env

FAST_REFRESH=false

2 . Now, stop & start the server

(Ctrl + C to start, if in CMD, on Windows OS)
npm start

4 . Now, change some text in the App.js

File: App.js

from "Learn React"
to "Learn React And it's working"

NOTE:
1 . Server restart is important.
2 . Refresh browser tab if you dont see changes.

Upvotes: 24

Luis Acero
Luis Acero

Reputation: 1100

Adding a .env file in the base path of the project and inside add FAST_REFRESH=false.

This disables fast refresh and returns to hot reload.

If you don't want to add a .env file to your base path you can choose these options:

  • "start": "FAST_REFRESH=false react-scripts start", in the package.json.
  • FAST_REFRESH=false npm run start, on the command line.
  • FAST_REFRESH=false, exporting it as an environment variable.

React 17

React-scrits 4

Upvotes: 85

POBrien
POBrien

Reputation: 101

On win10 in WSL2, I had to create the .env in the root folder, and include both

FAST_REFRESH = false
CHOKIDAR_USEPOLLING=true

My setup doesn't include any virtual machine (unless WSL2 is considered a VM?). Nevertheless the .env with the above two entries got it up and running.

Upvotes: 7

Karan
Karan

Reputation: 21

  1. In package.json, use "react-scripts": "3.4.4"

  2. Delete package-lock.json

  3. Run "rm -rf node_modules && npm install"

npm start

Upvotes: 1

gaurav
gaurav

Reputation: 443

for linux first check the number of the files allowed using:

cat /proc/sys/fs/inotify/max_user_watches

in my, it was 8192 so I just change it to 524288 and it worked perfectly.

commands use to change is:

cd /proc/sys/fs/inotify sudo nano max_user_watches

and then change no to 524288 save it and then use this command to apply the changes

sudo sysctl -p

reference from https://blog.jetbrains.com/idea/2010/04/native-file-system-watcher-for-linux/

Upvotes: 0

suvop
suvop

Reputation: 51

"dependencies": { "react": "^17.0.1", "react-scripts": "4.0.1", } if you are using these version then create .env file on the root directory of your project and type FAST_REFRESH=false and save it. Then yarn start OR npm start.

Upvotes: 0

Shirantha Madusanka
Shirantha Madusanka

Reputation: 1695

After creating a new project using create-react-app toolchain

Make sure to run

  1. npm install, then
  2. npm start

Upvotes: 1

MGLondon
MGLondon

Reputation: 1657

Edit: This might not be a recommended solution. The solution worked for Docker.

If using docker with a volume mount, you need to add an .env file in the src folder with the command CHOKIDAR_USEPOLLING=true in it. However, for me this threw an error

/app/src/App.js: Cannot find module '@babel/parser'

. To resolve this new error, changing the "react-scripts": "3.4.3" to "react-scripts": "3.4.0" in the package.json file worked. So you depending on your situation you may need to add the .env file and also change the react-scripts version.

Note: To put a little more context, I was working with docker and the react app files were mounted as a volume in the docker image (so that making changes in the app are directly reflected in the app without rebuilding a docker image). The above solution is based on other solutions posted in the community for docker where people had suggested changing the react scripts version. I don't think this should be a recommended solution. However, since I was doing a tutorial series I wanted to save time and focus on other things.

Upvotes: 2

laktak
laktak

Reputation: 60003

If you are running your app behind a reverse proxy / nginx (e.g. to enable https locally) you also need to enable websockets so it can detect the refresh:

location /sockjs-node {
    proxy_pass http://dockerhost:5000/sockjs-node;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

Upvotes: 1

In WSL2 work for me, "If the project runs inside a virtual machine such as (a Vagrant provisioned) VirtualBox, create an .env file in your project directory if it doesn’t exist, and add CHOKIDAR_USEPOLLING=true to it. This ensures that the next time you run npm start, the watcher uses the polling mode, as necessary inside a VM."

Or just run: $ CHOKIDAR_USEPOLLING=true npm start

Upvotes: 26

Rafa Nogales
Rafa Nogales

Reputation: 664

Find your index.js and change something in this file, for example add a white space, then save. It should show "compiling..." in your console.

Then you can modify other files and react will refresh on save.

It seems that npm is looking for changes in the index.js at the very first time, if you refactor your folder structure the index.js could be missed. Force an update in index.js file get the problem solved.

At least this has worked to me

Upvotes: 5

Subangkar KrS
Subangkar KrS

Reputation: 363

I had this problem while running npm within WSL. I had the project folder in my windows Desktop folder from which npm cannot recompile automatically in WSL.
After moving the project folder to user home directory of WSL solved the issue.

Upvotes: 8

sachin waghmare
sachin waghmare

Reputation: 1

Instead of

npm start

Run with administration permission in Linux

sudo npm start

Upvotes: -6

Vusal Hasanov
Vusal Hasanov

Reputation: 31

You might wanna add -w to {"start": "react-scripts start -w"}. I had the same issue, fixed by adding --watch.

Upvotes: 2

champion-runner
champion-runner

Reputation: 1647

Try using this command

echo fs.inotify.max_user_watches=524288 
sudo tee -a /etc/sysctl.conf && sudo sysctl -p

If still, the error is there then you need to remove your node modules and again

npm install

and then

npm start

Upvotes: 0

Related Questions