当前位置: 首页 > 面试题库 >

在AWS S3中部署react-redux应用程序

阳光辉
2023-03-14
问题内容

我已经通过很多的这样的堆栈溢出类似的问题了一个。每个人对部署react应用都有不同的看法。

但是这个问题是针对那些使用 reduxreact-routerreact-router-redux的人的
。我花了很多时间来找出承载单页应用程序的正确方法。我在这里汇总所有步骤。

我写了以下答案,其中包含将react-redux应用程序部署到S3的步骤。


问题答案:

有一个视频教程,用于将React
App部署到s3。这样就可以轻松地在s3上部署应用程序,但是我们需要在react应用程序中进行一些更改。由于很难遵循,因此我将其概括为步骤。它去了:

  1. Amazon AWS- > s3- > 创建存储桶
  2. 添加存储桶策略,以便每个人都可以访问react应用。单击 创建的存储区 -> 属性 -> 权限 。在那点击 编辑桶策略 。这是存储桶策略的示例。

    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Allow Public Access to All Objects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::<YOUR_BUCKET_NAME>/*"
        }
    ]
    

    }

  3. 如果需要日志,请创建另一个存储桶,并在 properties的* logs 部分下设置存储桶名称。 *

  4. 您需要在文件夹中包含 index.html (这是应用程序的起点)和 error.html 以及所有公共资产(浏览器化的reactJS应用程序和其他CSS,JS,img文件)。

  5. 确保在 index.html中* 对所有这些 公共 文件都有 相对 引用。 ***

  6. 现在,导航至“ 属性” ->“ 静态网站托管” 。启用 网站托管 选项。将 index.htmlerror.html 分别添加到字段中。保存时,您将收到 Endpoint

  7. 最后,您的 react-redux 应用已部署。您所有的反应路线都将正常运行。但是,当您 重新加载时 ,S3将重定向到该特定路由。由于尚未定义此类路由,因此会呈现 error.html

  8. 我们需要在 静态虚拟主机 下添加一些重定向规则。因此,当发生404时,S3需要重定向到 index.html ,但这只能通过添加一些前缀来实现,例如 #!。 。现在,当您使用任何反应路线重新加载页面时,而不是去 error.html ,将加载相同的URL,但带有前缀 #!。 。单击 编辑重定向规则, 然后添加以下代码:

        <RoutingRules>
        <RoutingRule>
            <Condition>
                <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
            </Condition>
            <Redirect>
                <HostName> [YOUR_ENDPOINT] </HostName>      
                <ReplaceKeyPrefixWith>#!/</ReplaceKeyPrefixWith>
            </Redirect>
        </RoutingRule>
    </RoutingRules>
  1. 作为响应,我们需要删除该前缀并将路由推送到原始路由。这是您需要在react app中进行的更改。我有 main.js 文件,这是react应用程序的起点。将侦听器添加到 browserHistory, 如下所示:
        browserHistory.listen(location => {
      const path = (/#!(\/.*)$/.exec(location.hash) || [])[1];
      if (path) {
          history.replace(path);
       }
     });
  1. 上面的代码将删除前缀并将历史记录推送到正确的路由(HTML 5浏览器历史记录)。例如: http ://s3.hosting/#!/event之类的内容将更改为 http://s3.hosting/event 。这样可以使 react-router 理解并相应地更改路由。这是我的 main.js 文件,用于更好地理解:
        import React from 'react';
    import ReactDOM from 'react-dom';
    import {createStore, compose, applyMiddleware} from 'redux';
    import {Provider} from 'react-redux'
    import {Router, Route, IndexRoute, browserHistory, useRouterHistory} from 'react-router';
    import {syncHistoryWithStore} from 'react-router-redux';
    import createLogger from 'redux-logger';
    import thunk from 'redux-thunk';


    const logger = createLogger();
    const createStoreWithMiddleware = applyMiddleware(thunk, logger)(createStore);
    const store = createStoreWithMiddleware(reducers);
    const history = syncHistoryWithStore(browserHistory, store);


    browserHistory.listen(location => {
      const path = (/#!(\/.*)$/.exec(location.hash) || [])[1];
      if (path) {
          history.replace(path);
       }
     });

因此,上传浏览器化或Webpacked react app(app.js文件)将满足所需的需求。由于我发现很难收集所有资料,因此将所有这些汇总为步骤。



 类似资料:
  • 我已经经历了很多类似的问题在堆栈溢出像这一个。每个应用程序都有不同的部署react应用程序的视角。

  • 在CRA使用网络字体有问题,在开发模式下它是这样加载的 字体已加载 但是当部署时,在生产模式下,它似乎根本没有加载。伙计们,有什么想法吗?这是我的css。

  • 和 Flux 类似,Redux 也是需要注册一个回调函数 store.subscribe(listener) 来获取 State 的更新,然后我们要在 listener 里面调用 setState() 来更新 React 组件。 Redux 官方提供了 react-redux 来简化 React 和 Redux 之间的绑定,不再需要像 Flux 那样手动注册/解绑回调函数。 接下来看一下是怎么做到

  • 我有这个问题,一个应用程序耳朵有这个错误,我是一个weblogic12c的新管理员,有人帮助我吗??? 这是一个标准安装Weblogic 12c

  • 我已经从https://www.tutorialspoint.com/reactjs/reactjsjsx.htm创建了一个基本的React应用程序。这里,我想在基于Apache的服务器上运行这个测试代码,我知道我需要创建一个可分发的构建,但我不知道如何做到这一点,也找不到清晰的说明。 我在Apache服务器上看到过这篇文章React,js,但它没有什么更多的指导方针

  • 我在Azure上的Linux应用服务上部署了一个响应js网站。但它没有部署在应用服务上。我使用pm2命令在linux环境下运行应用程序 pm2 serve/home/site/wwwroot/--无守护进程 但在错误日志中,未找到pm2的错误。接下来呢 容器没有响应端口: 8080上的HTTP ping,站点启动失败。 站点的容器已退出,站点启动失败