React PWA:create-react-app 使用 react-router 呈现 404 页面

React PWA: create-react-app using react-router renders 404 page

只有当我将我的 PWA 添加到主屏幕并从那里 运行 应用程序时才会发生这种情况。 我没有看到这种行为当我 运行 移动或桌面浏览器上的应用程序时。

我正在开发一个使用 create-react-app 构建的 React 应用程序。在 运行ning npm run build 并使用任何本地 http 服务器提供服务后,它工作正常。一旦我将它部署到 Firebase 或 now 并在 Firefox 或 Chrome 移动浏览器上打开该站点,它似乎也能正常工作。但是,当我点击弹出窗口中的 "Add to Homescreen" 按钮时,它会被添加,但是从主屏幕图标打开它会呈现 404 路由。

如果没有路径与 URL 匹配,我使用 react-router 的 <Switch/> 组件路由到自定义 404 页面。这是我定义路由器的方式 "configuration":

<Router>
    <Switch>
      <Route exact path="/" component={Login} />
      <Route path="/login" component={Login} />
      <Route path="/sign-up" component={SignUp} />
      <Route 
        render={() => (
        <div>
          <h1>Error 404: Not Found</h1>
          <Link to="/">Go Home</Link>
        </div>)}
      />
    </Switch>
</Router>

我的 package.json 中的软件包版本:

原因是当从主屏幕打开应用程序时,它会查找由 create-react-app 创建的 manifest.json 文件中提到的 ./index.html 路由。此路径与路由器配置中的任何路由都不匹配,因此呈现 404 页面。如果没有创建 404 页面,则会显示一个空白页面,因为所有路由都会 return 为空。

如果您在浏览器上手动访问 URL,您可以观察到相同的行为:https://website.com/index.html。该应用程序将呈现空白页面或 404 页面(如果您创建了一个页面)。

为了解决这个问题,请按如下方式更改 manifest.json 文件中的 start_url 字段:

{
  ...
  start_url: "/"
}

现在,当应用程序从主屏幕启动时,它将查找 '/' 路径而不是 '/index.html'