我可以在一个Spring项目中创建两个React应用程序吗?

时间:2019-07-03 08:41:36

标签: reactjs spring-boot spring-mvc

我有Web应用程序的两个不同部分,即公共站点和管理站点。我想为他们两个创建不同的独立React应用程序。对于API,我使用Spring-Boot。 我可以这样做吗? 以及我需要添加到webpack.config.js文件中的内容?

我试图再创建一个HTML页面并呈现给该应用程序。但这不起作用。因为一个React应用程序只渲染一次。

我希望使用一个API运行两个不同的React应用程序。

1 个答案:

答案 0 :(得分:0)

有2个主要选项:

  • 将3个应用程序(spring-boot,react-public,react-admin)拆分到单独的存储库中,并分别进行部署。
  • 使用Maven多模块构建为所有人使用1个仓库

我将从您的问题中假设您要执行选项2。

在这种情况下,请创建如下结构:

+ project
| - backend-api
| - frontend-public
| - frontend-admin

父级pom.xml应该引用3个模块:

<modules>
    <module>backend-api</module>
    <module>frontend-public</module>
    <module>frontend-admin</module>
</modules>

每个模块都应参考父pom:

<parent>
    <groupId>com.mycompany.myproject</groupId>
    <artifactId>myproject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

您的Spring Boot项目将不再能够使用Spring Boot父级,因此您需要导入BOM依赖项:

<dependencyManagement>
    <dependencies>            
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring.boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

在frontend- *模块中,您应该创建一个zip文件,然后可以使用maven-dependency-plugin将其拉入Spring Boot模块:

<plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>unzip-webapp-public</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>unpack</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>com.mycompany.myproject</groupId>
                                <artifactId>frontend-public</artifactId>
                                <version>${project.parent.version}</version>
                                <classifier>distribution</classifier>
                                <type>zip</type>
                            </artifactItem>
                        </artifactItems>
                        <outputDirectory>${project.build.directory}/classes/static/public</outputDirectory>
                    </configuration>
                </execution>

                        解压webapp-admin                         流程资源                                                      打开包装                                                                                                                                                     com.mycompany.myproject                                     前端管理员                                     $ {project.parent.version}                                     分配                                     压缩                                                                                           $ {project.build.directory} / classes / static / admin                                                                            

这会将React应用程序解压缩到/static/public/static/admin。结果,Spring Boot将在应用程序中的/public/admin处为它们提供服务。