【问题标题】:Deploying a create-react-app to Plesk Onyx将 create-react-app 部署到 Plesk Onyx
【发布时间】:2018-07-08 03:03:56
【问题描述】:

这个问题不会特别详细,因为这个问题非常基本,并且与 Plesk Onyx 如何实现节点支持的限制有关。

我正在尝试将使用 create-react-app 创建的 react 应用程序部署到安装了 Plesk Onyx 的服务器上托管的域。我显然不能乱搞核心服务器,因为我可能会破坏其他域。因此,我需要以 Plesk 正确处理的方式安装此应用程序。我遇到的问题是我没有找到如何在任何地方执行此操作的指南。

Plesk 需要一个非常不灵活的项目结构,它与 create-react-app 强加的结构完全不同。例如,Plesk 要求文档根目录是应用程序根目录的子节点,这与 create-react-app 设置项目的方式完全相反。

这里我没有展示代码,因为这是一个部署问题,而不是代码问题,并且涉及项目的结构以及如何将圆钉塞入方孔。

【问题讨论】:

    标签: reactjs create-react-app plesk-onyx


    【解决方案1】:

    我发现一个非常简单的方法是在不添加 express 或使用节点的情况下执行此操作。这也将使react-router 工作。

    1. 将以下.htaccess 文件添加到public 文件夹中的create-react-app 文件夹中
    选项 - 多视图 重写引擎开启 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.html [QSA,L]
    1. 运行npm run-script build
    2. build 目录的全部内容FRP 复制到您在Plesk 上的Linux 服务器

    【讨论】:

      【解决方案2】:

      Valian 的解决方法确实适用于 SPA。但是,如果您使用 react-router 创建多页应用程序,则很容易解决。

      您需要添加一个带有通配符的附加 app.get() 以覆盖所有路径。

      const express = require('express');
      const bodyParser = require('body-parser')
      const path = require('path');
      const app = express();
      app.use(express.static(path.join(__dirname, 'build')));
      
      app.get('/', function (req, res) {
          res.sendFile(path.join(__dirname, 'build', 'index.html'));
      });
      
      app.get('/*', function (req, res) {
        res.sendFile(path.join(__dirname, 'build', 'index.html'));
      });
      
      app.listen(process.env.PORT || 8080);
      

      【讨论】:

        【解决方案3】:

        我遇到过类似的问题,但我认为我有某种解决方法。我实际上并没有尝试过这是否有效或在 Plesk Onyx 中是否有效。

        基本上我想将一个 create-react-app 放到一个基于 plesk onyx 的主机上并运行 npm start 最终导致 react-scripts start,我意识到 Plesk 没有这样做的能力。 Plesk 不是 VPS...

        相反,Plesk 运行一个 js 脚本文件来执行服务器,例如 App.jsserver.js,它可以通过 Plesk NodeJS 控制面板进行设置。

        为此,我通过运行安装了expressnpm install express --save 并制作了一个包含以下代码的server.js 文件:

        const express = require('express');
        const bodyParser = require('body-parser')
        const path = require('path');
        const app = express();
        app.use(express.static(path.join(__dirname, 'build')));
        
        app.get('/', function (req, res) {
          res.sendFile(path.join(__dirname, 'build', 'index.html'));
        });
        
        app.listen(process.env.PORT || 8080);
        

        我从这里得到代码: https://dev.to/loujaybee/using-create-react-app-with-express

        然后我运行npm run build 来创建生产版本,最后运行node server.js。我的应用程序(react 教程中的一个简单井字游戏)在 localhost 端口 8080 中可用。

        The root page

        如果我成功了,我会给你一个更新。

        【讨论】:

          猜你喜欢
          • 2017-09-21
          • 2019-06-05
          • 2018-09-06
          • 1970-01-01
          • 2018-10-19
          • 2021-09-27
          • 1970-01-01
          • 1970-01-01
          • 2019-07-11
          相关资源
          最近更新 更多