如何在Tomcat中部署React应用程序?

时间:2017-06-27 09:31:29

标签: node.js maven tomcat

问题陈述:我的应用程序有两个部分。 前端和后端。前端使用React构建,使用Node.js,后端是maven web app,前端和后端之间的通信使用REST完成。 我的应用程序在两台服务器上运行。前端正在Node.js运行,而后端正在tomcat上运行。 我想要的是在同一台服务器上部署这两个部分。

我该怎么做?

我尝试了什么。

第一种方法:我尝试使用maven插件。在pom.xml

中添加了波纹管插件

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <executions>
    <execution>
      <id>exec-npm-install</id>
      <phase>compile</phase>
      <configuration>
        <executable>npm</executable>
        <arguments>
          <argument>--prefix</argument>
          <argument>${basedir}/src/main/webapp/ui</argument>
          <argument>install</argument>
          <argument>${basedir}/src/main/webapp/ui</argument>
        </arguments>
      </configuration>
      <goals>
        <goal>exec</goal>
      </goals>
    </execution>
    <execution>
      <id>exec-webpack</id>
      <phase>compile</phase>
      <configuration>
        <executable>npm</executable>
        <arguments>
          <argument>--prefix</argument>
          <argument>${basedir}/src/main/webapp/ui</argument>
          <argument>run</argument>
          <argument>build</argument>
        </arguments>
      </configuration>
      <goals>
        <goal>exec</goal>
      </goals>
    </execution>
  </executions>
</plugin>

在后端web-app文件夹中添加了前端应用程序文件夹。 但是这种方法的问题是,当我mvn install下载所有node module时,由于节点模块,项目的大小变得非常大(700MB)。 这不是欲望。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

Node.js本身就是一个服务器,并且不能由tomcat处理。您必须并排安装两个服务器应用程序(节点上的前端和tomcat上的后端)。

由于tomcat不支持您的前端文件,因此不应将它们安装在tomcat文件夹中并将它们分开(尽管如此,您仍然可以使用maven进行安装)。

node.js服务器需要依赖文件(node_module文件夹),你无法摆脱它。

同样涵盖在Can node js be run within tomcat server

答案 1 :(得分:0)

遇到类似的难题,这就是我所做的:enter image description here

  1. 在整个项目的根目录中创建了Webpack项目,这样我就可以将node_modules文件夹保留在FrontEnd之外,并且仍然告诉Webpack将构建内容放入FrontEnd中,我的Tomcat应用程序可以在其中放置index.jsp 。 (为此,我必须将其输出文件夹放在Webpack应用程序内部,即使它看起来不是很有条理,我也必须将其放在最上层目录中)

这是webpack.production.config中输出的配置:

  output: {
    filename: '[name].[contenthash].js',
    path: path.resolve(__dirname, 'FrontEnd/src/main/webapp/'), 
    publicPath: '' 
  },

因此,当您在控制台中运行npm run build时,webpack会生成输出文件并将其放置在FrontEnd中: enter image description here

最后,要告诉Webpack生成JSP文件,并告诉它清除每个版本中除WEB-INF和META-INF之外的所有内容,您需要将以下插件添加到WebPack:

  plugins: [ 
    new CleanWebpackPlugin(['AMS/src/main/webapp/'], {
        exclude: ['WEB-INF', 'META-INF'],
        verbose: true
    }),
    new HtmlWebpackPlugin({ 
      filename:'index.jsp' 
    })
  ]

希望对您有帮助。祝您好运!