为什么不在浏览器上运行React生成版本?

时间:2017-06-05 14:18:21

标签: reactjs

我正在尝试使用react的构建工具构建我的反应应用程序。当我尝试“npm start”时,该应用程序运行正常。

npm start

http://localhost:3000 =>我可以访问该应用程序。

enter image description here

但是当我构建应用程序并尝试访问构建文件夹中的“index.html”文件时,它不起作用,我遇到了一个白色的空白屏幕。

npm run build

http://myreact-app/build/index.html =>白色空白屏幕。

这是在运行npm run build之后创建的构建文件夹。

enter image description here

这是 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>

我做错了吗?我无法访问我的apache Web服务器上的构建的index.html文件吗?

9 个答案:

答案 0 :(得分:18)

可能你还没注意到,但我不认为你的html文件能够正确导入css和脚本文件。当我查看您的文件结构时,我看到有关构建的所有内容都在构建文件夹下。但是在你的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>
      <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>

答案 1 :(得分:9)

https://github.com/facebookincubator/create-react-app/issues/1487

如果添加以下问题,可以克服上述问题 - “主页”: “”,

你的package.json中的

。 这不是官方的,而是一个很好的黑客。

答案 2 :(得分:1)

您应该尝试使用服务包here来运行单页应用。

  • serve help全局安装
  • serve --single build查看帮助文本
  • {{1}}提供单页应用。我将启动服务器,您可以从中访问您的反应应用程序

答案 3 :(得分:1)

要解决此问题,请转到您的build文件夹,然后您将看到manifest.json文件,将其打开,您将看到manifest.json具有以下内容:

"start_url": ".",

将其更改为

"start_url": "/",

还有另一种解决问题的方法:

在您的React项目构建之前,请转到您的package.json文件,并使用homepage值或您的网站基本URL指定.属性,请参见示例:

{
   ....
   "homepage": ".",
   ......
}

答案 4 :(得分:0)

您需要安装本地服务器插件/扩展。

如果您是vscode用户,则搜索实时服务器扩展并安装它。然后,编辑器底部将显示“上线”选项。

对于其他编辑用户(原子/崇高),请搜索实时服务器插件。

答案 5 :(得分:0)

如果以上方法均无效。可能是问题出在,您正在使用react-router-dom,并且路由需要进行特殊的编译,从而为htmls配置中存在的每个页面生成单独的router

参考: I'm using create-react-app and I need to open build/index.html in browser directly without a server

总而言之,您需要使用<HashRouter>而不是<Router><Switch>包装器来路由。例如:

<Switch>
  <Route exact path='/' component={WelcomePage} />
  <Route exact path='/game' component={GamePage} />
</Switch>

考虑您的路线将更改为:

http://localhost:3000/#/ -> Root page
http://localhost:3000/#/game -> Other page

答案 6 :(得分:0)

有时不提供内容的原因是因为“ serve -s”命令是从构建目录外部执行的。正确的方法是进入构建目录,然后从其中执行“ serve -s”。

答案 7 :(得分:0)

我在 webroot 中有一个 index.php,它阻止了我的应用运行 index.html

答案 8 :(得分:-1)

我能够通过禁用开发工具上的缓存来解决此问题。我检查了网络选项卡,发现状态响应代码为304(来自缓存),禁用缓存后响应状态为200。 enter image description here