为什么React Webpack生产版本显示空白页面?

jas*_*san 22 javascript web-applications reactjs webpack redux

我正在建立一个反应应用程序,目前webpack-dev-server工作正常(hello世界文本显示),但webpack -p显示空白页面.对于生产构建chrome dev工具下的网络选项卡,显示index.html并且index_bundle.js大小为0 B(参见图片)在此输入图像描述但显然并非如此,HTML文件大小为227 B,index_bundle.js文件大小为195Kb(见图)

此外,Chrome Devtools Elements标签显示以下内容(见图片) 在此输入图像描述

我的webpack配置文件如下所示:在此输入图像描述

jas*_*san 23

我想通了,我在没有设置本地服务器的情况下使用了browserHistory.如果我把它改成hashHistory它就有效了.要使用react-router浏览器历史记录在本地测试webpack生产,我需要这样做配置服务器:

您的服务器必须准备好处理真实的URL.当应用程序首次加载/它可能会工作,但当用户导航,然后在/ accounts/23点击刷新时,您的Web服务器将收到/ accounts/23的请求.您将需要它来处理该URL并在响应中包含您的JavaScript应用程序.

快递应用可能如下所示:

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)
Run Code Online (Sandbox Code Playgroud)

如果有人使用带路由器历史记录的react-router部署到firebase,请执行以下操作:

{
  "firebase": "<YOUR-FIREBASE-APP>",
  "public": "<YOUR-PUBLIC-DIRECTORY>",
  "ignore": [
    "firebase.json",
    "**/.*",
    "**/node_modules/**"
  ],
  "rewrites": [
    {
      "source": "**",
      "destination": "/index.html"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用!`'react-router-dom'`中的`import {HashRouter as Router},而不是'react-router-dom'`中的`import {BrowserRouter as Router}.我正在尝试在Swarm上部署一个React.js站点,几个小时后,哈希路由器是我能让它工作的唯一方法! (2认同)

小智 5

使用

import { HashRouter } from 'react-router-dom';
Run Code Online (Sandbox Code Playgroud)

代替

import { BrowserRouter} from 'react-router-dom';
Run Code Online (Sandbox Code Playgroud)

并且不要忘记在您的路线代码中替换它

<HashRouter>
  ...
</HashRouter>
Run Code Online (Sandbox Code Playgroud)