Reputation: 12967
I'm building a react app, and at the moment webpack-dev-server
works just fine( the hello world text shows up ), But webpack -p shows blank page. For the Production build The network tab under chrome dev tools, shows index.html
and index_bundle.js
to have size 0 B(see picture) But That is clearly not the case HTML file size is 227 B &
index_bundle.js
file size is 195Kb(see picture)
Also Chrome Devtools Elements Tab shows the following(see picture)
My webpack config file looks like this:
Upvotes: 27
Views: 25949
Reputation: 31
Changing
import {BrowserRouter as Router} from 'react-router-dom'
to:
import {HashRouter as Router} from 'react-router-dom'
in App.js helped me fix the same issue in my create-react-app project.
Upvotes: 3
Reputation: 71
I had a unique solution - only one page was not running for me. So I just inspected the console log and found the error. For some reason, the error was only displaying for "react-scripts-build", not "react-scripts-start".
This resulted in a blank page
Upvotes: 0
Reputation: 6032
None of these worked for me my error was because I mixed up folders
Solution:
npm run build
my apache config:
did not work
DocumentRoot /var/www/sites/example.com/client/public/
worked (build folder not public)
DocumentRoot /var/www/sites/example.com/client/build/
Upvotes: 1
Reputation: 21
<BrowserRouter basename="/calendar" />
<Link to="/today"/> // renders <a href="/calendar/today">
basename: string
The base URL for all locations. If your app is served from a sub-directory on your server, you’ll want to set this to the sub-directory. A properly formatted basename should have a leading slash, but no trailing slash.
Upvotes: 2
Reputation: 586
GitHub Pages doesn’t support routers that use the HTML5 pushState
history API under the hood (for example, React Router using browserHistory
). This is because when there is a fresh page load for a url like http://user.github.io/todomvc/todos/42
, where /todos/42
is a frontend route, the GitHub Pages server returns 404 because it knows nothing of /todos/42
. If you want to add a router to a project hosted on GitHub Pages, here are a couple of solutions:
hashHistory
for this effect, but the URL will be longer and more verbose (for example, http://user.github.io/todomvc/#/todos/42?_k=yknaj
). Read more about different history implementations in React Router.index.html
page with a special redirect parameter. You would need to add a 404.html
file with the redirection code to the build
folder before deploying your project, and you’ll need to add code handling the redirect parameter to index.html
. You can find a detailed explanation of this technique in this guide.Upvotes: 2
Reputation: 371
use
import { HashRouter } from 'react-router-dom';
instead of
import { BrowserRouter} from 'react-router-dom';
and don't forget to replace it in your routes code
<HashRouter>
...
</HashRouter>
Upvotes: 10
Reputation: 12967
I figured it out, I was using browserHistory without setting up a local server. If i changed it to hashHistory it worked. To test webpack production locally with react-router browser history i needed to do this Configure a Server:
Your server must be ready to handle real URLs. When the app first loads at / it will probably work, but as the user navigates around and then hits refresh at /accounts/23 your web server will get a request to /accounts/23. You will need it to handle that URL and include your JavaScript application in the response.
An express app might look like this:
const express = require('express')
const path = require('path')
const port = process.env.PORT || 8080
const app = express()
// serve static assets normally
app.use(express.static(__dirname + '/public'))
// handle every other route with index.html, which will contain
// a script tag to your application's JavaScript file(s).
app.get('*', function (request, response){
response.sendFile(path.resolve(__dirname, 'public', 'index.html'))
})
app.listen(port)
console.log("server started on port " + port)
And just in case anyone is deploying to firebase using react-router with browser-history do this:
{
"firebase": "<YOUR-FIREBASE-APP>",
"public": "<YOUR-PUBLIC-DIRECTORY>",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
}
Upvotes: 26