Webpack前端整合到SpringMVC項目中

Webpack前端整合到SpringMVC項目中

背景

容器引擎系統(tǒng)不支持直接部署Nodejs環(huán)境,需要結(jié)合maven插件在jenkins構(gòu)建階段編譯Webpack項目。這里我把前端代碼整合到SpringMVC項目中,作為一個整體工程進行打包部署。

SpringMVC是已有項目,需要保留舊版本。這次重構(gòu)前端,并在后端添加單獨API模塊。

目錄結(jié)構(gòu)

|-- src
    |-- frontend (Webpack項目)
    |-- java
    |-- resources
    |-- webapp
|-- pom.xml

如上所示,frontend是Webpack項目,可以單獨在Webstorm進行開發(fā)運行。如果要在SpringMVC工程中編譯Webpack并部署到Tomcat,需要對pom.xml作少許改動,添加相應(yīng)的maven插件。

編譯方式

主要用到maven-war-pluginfrontend-maven-plugin兩個插件。

frontend-maven-plugin插件

下載nodejs到指定目錄,執(zhí)行Webpack編譯命令。

maven-war-plugin插件

將Webpack編譯后的文件放到target指定目錄。

<plugin>
    <groupId>com.github.eirslett</groupId>
    <artifactId>frontend-maven-plugin</artifactId>
    <version>1.6</version>
    <executions>
        <execution>
            <id>install node and npm</id>
            <goals>
                <goal>install-node-and-npm</goal>
            </goals>
        </execution>
        <execution>
            <id>npm install</id>
            <goals>
                <goal>npm</goal>
            </goals>
            <configuration>
                <arguments>install</arguments>
            </configuration>
        </execution>
        <execution>
            <id>npm run build</id>
            <goals>
                <goal>npm</goal>
            </goals>
            <configuration>
                <arguments>run build</arguments>
            </configuration>
        </execution>
    </executions>
    <configuration>
        <!--node版本-->
        <nodeVersion>v10.14.2</nodeVersion>
        <!--node安裝路徑-->
        <installDirectory>target</installDirectory>
        <!--前端代碼路徑-->
        <workingDirectory>src/main/frontend</workingDirectory>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <warName>[war包名稱]</warName>
        <webResources>
            <resource>
                <filtering>true</filtering>
                <directory>src/main/webapp</directory>
            </resource>
            <resource>
                <filtering>true</filtering>
                <!--Webpack編譯目標路徑-->
                <directory>src/main/frontend/dist</directory>
                <!--拷貝到target指定目錄-->
                <targetPath>WEB-INF/web</targetPath>
            </resource>
        </webResources>
    </configuration>
</plugin>

配置文件

sitemesh配置

SpringMVC使用sitemesh+JSP,無法直接訪問新增的html及api,需要修改sitemesh配置文件

我的sitemesh配置文件路徑為src/main/webapp/WEB-INF/decorators.xml

<?xml version="1.0" encoding="UTF-8"?>
<decorators defaultdir="/WEB-INF/views">
   <decorator name="default" page="layouts/default.jsp" />
    <excludes>
        <!--符合下列模式的url不進行sitemesh裝飾-->
        <pattern>*.html</pattern>
        <pattern>/api/*</pattern>
    </excludes>
</decorators>

spring配置

訪問靜態(tài)資源時,根據(jù)配置的mapping到指定的location下尋找資源文件。

不配置靜態(tài)資源,訪問時會報404 NOT FOUND錯誤

<!-- 靜態(tài)資源映射 -->
<!-- Webpack編譯后的靜態(tài)資源目錄 -->
<mvc:resources mapping="/static/**" location="/static/,/WEB-INF/web/static/" />
<mvc:resources mapping="/**/*.html" location="/WEB-INF/web/" />
<mvc:resources mapping="*.html" location="/WEB-INF/web/" />
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1 Webpack 1.1 概念簡介 1.1.1 WebPack是什么 1、一個打包工具 2、一個模塊加載工具 3...
    Kevin_Junbaozi閱讀 6,733評論 0 16
  • 一、webpack的基本概念 webpack 本質(zhì)上是一個打包工具,它會根據(jù)代碼的內(nèi)容解析模塊依賴,幫助我們把多個...
    cilla123閱讀 1,572評論 0 8
  • GitChat技術(shù)雜談 前言 本文較長,為了節(jié)省你的閱讀時間,在文前列寫作思路如下: 什么是 webpack,它要...
    蕭玄辭閱讀 12,715評論 7 110
  • 寫在前面的話 閱讀本文之前,先看下面這個webpack的配置文件,如果每一項你都懂,那本文能帶給你的收獲也許就比較...
    不忘初心_9a16閱讀 3,260評論 0 17
  • 臨淵羨魚,不如退而結(jié)網(wǎng)。 常常羨慕別人的成就,這是很多人的通病。說俗點,就是見不得別人好,眼紅。但凡別人取得點成就...
    愛伸懶腰的小老鼠閱讀 285評論 0 0