7

我使用 Create-React-App 创建了一个 ReactJS 应用程序,并希望将其部署在 Linux 服务器上。我遵循了一个教程,该教程显示了如何通过安装 pm2 和 serve 来非常简单地做到这一点,然后在运行命令后:

npm run build

我运行了实际托管应用程序的命令:

pm2 serve build

现在的问题是,每当我访问一个不是基本 URL 的 URL,或者当我在主页以外的页面上时从浏览器单击重新加载时,我都会收到 404 not found 错误。

我了解前面的命令仅用于提供单个页面。我的问题是:有没有办法让例如http://myserver:port/a的 url在我的应用程序中转到 Route a?或者至少去http://myserver:port/

我已经在同一台服务器上安装了 Nginx,因为我正在使用它来托管 Flask Python 应用程序,但是我对这一切都很陌生,我正在寻找一种简单的工作方式,因为我遇到了一些困难来获得托管的 Python 应用程序。

请注意,我只使用 React,没有 Redux、express 或任何数据库,如果这有任何相关性的话。我也在我的应用程序中使用 BrowserRouter。

4

3 回答 3

5

pm2 serve具有单页应用程序模式(https://pm2.keymetrics.io/docs/usage/expose/#serving-spa-redirect-all-to-indexhtml

从文档:

要自动将所有查询重定向到 index.html,请使用 --spa 选项:

pm2 serve build --spa

或者如果使用ecosystem.config.js文件:

module.exports = {
  script: "serve",
  env: {
    PM2_SERVE_PATH: 'build',
    PM2_SERVE_PORT: 8080,
    PM2_SERVE_SPA: 'true',
    PM2_SERVE_HOMEPAGE: '/index.html'
  }
}
于 2020-01-06T06:41:56.773 回答
1

我使用 Vue.js,“npm run build”命令生成静态文件到 dist 文件夹,pm2 命令如下所示:

pm2 --name <appName> serve --spa <staticFolder> <port>
于 2021-02-15T17:05:12.837 回答
1

pm2 serve build只是静态地提供构建文件夹。因此http://myserver:port/a将在构建文件夹中请求名为“a”的文件。如果没有找到,则返回 404

为了使您的服务器能够处理其他路由,您不能使用 pm2 serve。相反,您应该通过 pm2 启动您的烧瓶服务器。您可以看一下如何为 nodejs 运行像 pm2 这样的 python 脚本

于 2018-08-29T14:26:42.043 回答