Reputation: 3862
I'm trying to build my react app using react's build tool. When I try to "npm start", the app works fine.
npm start
On http://localhost:3000 => I can access the application.
But when I build the application and try to access "index.html" file on the build folder, it doesn't work and I encounter with a white blank screen.
npm run build
http://myreact-app/build/index.html => White blank screen.
This is the build folder which has been created after run npm run build.
And this is the index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
<meta name="theme-color" content="#000000">
<link rel="manifest" href="/manifest.json">
<link rel="shortcut icon" href="/favicon.ico">
<title>React App</title>
<link href="/static/css/main.9a0fe4f1.css" rel="stylesheet">
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script type="text/javascript" src="/static/js/main.46d8cd76.js"></script>
</body>
</html>
Am I doing something wrong? Can't I access the built index.html file on my apache web server?
Upvotes: 57
Views: 125562
Reputation: 794
Probably you've not noticed yet but I don't think your html file is able to import css and script files correctly. When I look at your file structure, I see the everything about build is under the build folder. But in your html file, there are slashes ("/") before the file paths. That's why browser is looking for those files under the parent of the "build". Try to remove slashes.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
<meta name="theme-color" content="#000000">
<link rel="manifest" href="/manifest.json"><link rel="shortcut icon" href="/favicon.ico">
<title>React App</title>
<style></style>
<link href="static/css/main.65027555.css" rel="stylesheet">
</head>
<body
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script type="text/javascript" src="static/js/main.316f1156.js"></script>
</body>
</html>
And above mentioned "homepage": "."
in package.json
file adds .
in front of slash so it becomes ./static/js/main.123.js
which does the same trick
Upvotes: 47
Reputation: 5
Try using <HashRouter>
instead of <Router>
, and don't forget to import {HashRouter}
.
Upvotes: 0
Reputation: 111
I use HashRouter instead BrowserRouter & also need to add /# infront of every url like this:
href={`/#/blogs/${slug}`}
this works for me , thanks
Upvotes: 0
Reputation: 666
The above problem can be overcome if you add
"homepage":".",
in your package.json
. This is not official but a good hack to follow.
https://github.com/facebookincubator/create-react-app/issues/1487
Upvotes: 47
Reputation: 1765
I had an index.php
in the webroot which prevented my app from running index.html
.
Upvotes: 0
Reputation: 31
Sometimes the reason that the content is not served is because the command of "serve -s" was executed from outside of the build directory. The correct way is to go into the build directory then execute "serve -s" from therein.
Upvotes: 0
Reputation: 8049
If nothing of above works. Maybe the problem is that you are using react-router-dom
and the routes needs a special compilation generating individual htmls
for each page that exists in your router
config.
Ref: I'm using create-react-app and I need to open build/index.html in browser directly without a server
In summary you need to use <HashRouter>
instead <Router>
and a <Switch>
wrapper to your routes. For example:
<Switch>
<Route exact path='/' component={WelcomePage} />
<Route exact path='/game' component={GamePage} />
</Switch>
Consider that your routes will change to:
http://localhost:3000/#/ -> Root page
http://localhost:3000/#/game -> Other page
Upvotes: 8
Reputation: 1043
To fix this problem go to your build
folder then you will see manifest.json
file, open it and you will see your manifest.json
have:
"start_url": ".",
change it to
"start_url": "/",
there is alternative way to fix the problem:
before your react project build go to your package.json
file and specify homepage
property with .
value or maybe with your site base url, see example:
{
....
"homepage": ".",
......
}
Upvotes: 26
Reputation: 8146
You need to install local server plugin/extenstion.
If you are vscode user then search live server extension and install it. Then there will be "Go live" option in bottom of your editor.
For other editor user (atom/sublime) search for live server plugins.
Upvotes: 0
Reputation: 5598
you should try use the serve package here to run single page app.
npm install -g serve
to install globallyserve help
to see help textsserve --single build
to serve single page app. I server will be started from which you can access your react appUpvotes: 5