【问题标题】:React + Spring Boot deploymentReact + Spring Boot 部署
【发布时间】:2018-09-23 20:11:04
【问题描述】:

我在使用 Spring Boot 部署 react nodejs 应用程序时遇到问题。 spring 应用程序可以与基本的 HTML/JS 一起正常工作,并且我的 react 应用程序在开发模式下运行良好,但就正确捆绑 react 和 spring 而言,我似乎遗漏了一些东西。

目前,我可以使用一些简单的 HTML 和 javascript ajax 调用(无反应)来运行/部署我的 Spring Boot 应用程序。它在我的 AWS ec2 上运行没有问题。

我还可以通过节点 JS“npm start”在开发模式下运行我的 react 应用程序,并将其指向我的本地 spring boot 应用程序。 (我将"proxy": "http://localhost:8080" 添加到manifest.json)。我正在努力将我的反应应用程序与我的 Spring 应用程序的其余部分实际捆绑到战争中并让它工作的下一步。如果没有休息电话,我什至无法加载 react hello-world 页面。

我尝试运行npm run build,然后将/build 目录中生成的所有文件复制到我的spring 项目的/src/main/resources。 具体是我抄的:

react-app/build/static/* -> spring-app/src/main/resources/static/.

react-app/build/* -> spring-app/src/main/resources/.

在构建战争 (mvn install) 并在本地运行战争之后,我在尝试加载服务器时遇到 404 错误,而没有指定任何页面。当我指定 index.html 时,我收到错误,它无法在我的静态目录中加载 JS 和 CSS 文件。当我将战争部署到 ec2 并尝试加载页面时,也会出现同样的问题。

我还缺少更多配置步骤吗?我知道我可能需要做一些基本的 URL 配置才能在开发模式之外使用其余 API,但是如果没有任何休息调用,我什至无法加载页面。我尝试将 index.html 移动到各个位置,例如 /resources/static/resources/public。任何帮助将不胜感激。

【问题讨论】:

  • 我认为将前端应用程序与后端捆绑在一起是一个非常糟糕的主意,原因有很多。大仓库,关注点分离差,复杂的发布周期/部署,紧密耦合,你可能有多个 UI - 例如。 web 和 native,为不需要关心 java 或 maven 等的 UI 开发人员提供更多设置。为什么不拥有两个项目,因为它们彼此不依赖,UI 就像任何其他客户端一样使用 API。
  • 是的,我现在同意哈哈。我想我会放弃这个想法并将客户端托管在heroku或firebase或其他东西上,并将spring应用程序单独托管在aws上。通过这种方式,我可以让反应文件更有条理。
  • 是的,我想是的!

标签: node.js reactjs spring-boot


【解决方案1】:

我使用 frontend-maven-pluginma​​ven-antrun-plugin 为生产目的采用了相同的方法。

我使用 frontend-maven-plugin 生成 React 包(npm installnpm run build)和 ma​​ven-antrun-plugin 将工件复制到spring boot 的公用文件夹。

可以在here找到一个很棒的示例项目和教程

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题 在项目的 src 文件夹中创建了一个文件夹 webapp/resources,并复制了从 npm install 生成的 build 文件夹内容并运行 build。 这解决了问题。

    在我的项目中,我在 src/main/app 文件夹中有 Ui 文件,并在其上运行 npm install 并运行构建命令。 然后将构建文件夹内容复制到 src/main/webapp/resources https://github.com/Aditya260194/spring-boot-react-app

    下面是我的构建和战争部分

            <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>npm install</id>
                            <phase>generate-sources</phase>
                            <goals>
                                <goal>exec</goal>
                            </goals>
                            <configuration>
                                <workingDirectory>${uiResourcesDir}</workingDirectory>
                                <executable>npm.cmd</executable>
                                <arguments>
                                    <argument>install</argument>
                                </arguments>
                            </configuration>
                        </execution>
                        <execution>
                            <id>npm run build</id>
                            <phase>generate-sources</phase>
                            <goals>
                                <goal>exec</goal>
                            </goals>
                            <configuration>
                                <workingDirectory>${uiResourcesDir}</workingDirectory>
                                <executable>npm.cmd</executable>
                                <arguments>
                                    <argument>run</argument>
                                    <argument>build</argument>
                                </arguments>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
    

    【讨论】:

      【解决方案3】:

      从 Spring 中查看本教程,有一个“frontend-maven-plugin”,您可能会发现它非常有用。我会放弃战争,将你的 Spring Boot 应用程序构建为一个 jar,然后将你的 js 文件放在 src/main/js 中,并将你的 index.html 放在 /src/main/resources/static 中。

      教程可在此处获得:

      https://spring.io/guides/tutorials/react-and-spring-data-rest/

      代码可以在这里找到:

      https://github.com/spring-guides/tut-react-and-spring-data-rest/tree/master/basic

      使用类似于教程中使用的 webpack.config.js 配置,一旦您使用 maven 前端插件构建,它将“正常工作”。

      正如其他人所建议的,最好将前端和后端代码分开(将它们保存在单独的存储库中)。

      【讨论】:

      • 非常感谢!我会检查一下。我希望我需要做一些小的配置更改,但我想我会开始重构我的项目。
      • 我可以运行一个非常基本的应用程序,但我似乎在构建基本的 CSS 文件时遇到了问题。
      • 当我运行“mvn clean install”时:./src/main/js/App.css [INFO] 中的错误 [INFO] 模块构建失败:SyntaxError: C:/Users/btillinghast/git/misdeal/ src/main/js/App.css:意外令牌 (1:0) [INFO] [INFO] > 1 | .App { [信息] | ^ [信息] 2 |文本对齐:居中; [信息] 3 | } [信息] 4 |
      • 我觉得你应该把你的css文件放在这个目录下:src/main/resources/static
      • 同样的问题。我仍然在第一个字符 '.' 上遇到语法错误。我的css文件。当我运行 mvn install 时,我也会收到此警告:[WARNING] npm WARN webpack-cli@2.0.14 requires a peer of webpack@^4.0.0 but none was installed。会不会是这个问题?
      猜你喜欢
      • 2017-09-30
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 2019-03-23
      • 2014-06-17
      • 2017-09-28
      • 1970-01-01
      相关资源
      最近更新 更多