在Maven中前端构建实践

2023-11-17

NodeJS为前端技术的发展带来了一次革新,层出不穷的前端库、框架以及打包工具让大家应接不暇,然而这使得前端技术越来越依赖于NodeJS,基于NodeJS编写的前后台项目可以使用同一编译或者打包工具进行管理从而做到无缝的前后端版本控制以及联调等事情上的统一。


在这样的背景下,Java微服务也需要在项目内实现前端项目的统一打包处理,完成前后端的自动化。那么问题就产生了,我们需要在Maven打包时提供一个基于NodeJS的构建插件,接下来我将介绍frontend-maven-plugin。


该插件直接将NodeJS以及NPM下载安装到项目本地,与系统环境中的NodeJS隔离开来,降低了服务迁移中服务对服务器NodeJS版本的依赖,提高了服务的可移植性。同时,服务的前端与后端又尽可能的相对隔离,最大限度的减少前后端的相互作用,提高开发效率。前端开发人员依旧在服务项目中使用本地NodeJS进行开发调试,运维在生产打包时运行查件将前端dist文件打入相应的war包或者jar包中完成部署。



接下来介绍一下插件的相关配置以及使用方法



代码示例-1中,configuration标签中涉及到了两个配置项,一个是installDirectory,该配置项是用于指定项目中NodeJS以及NPM的安装目录;另一个是workingDirectory,这一配置项用于指定静态资源目录,既含有package.json的前端静态资源的相对目录,如果该目录未指定将默认为Maven打包根目录既pom.xml目录下。


<plugin>

    <groupId>com.github.eirslett</groupId>

    <artifactId>frontend-maven-plugin</artifactId>

       <version>1.4</version>

       <configuration>

           <installDirectory>target</installDirectory>

           <workingDirectory>src/main/static/</workingDirectory>

       </configuration>

       ……

</plugin>

代码示例-1


配置完成后,我需要执行一些命令来安装NodeJS、NPM以及前端构建所需要的node_modules,同时在安装完成后来执行打包等命令来完成前端构建。下面的代码示例-2中我们看到插件的命令是由一个executions组成,而一个executions又是由多个execution组成共同完成前端构建的。在这些执行任务中,首先是install node and npm的命令,完成项目目录下NodeJS与NPM的安装,该命令中可以指定NodeJS与NPM的版本,来提高前端开发本地开发环境与生产环境的一致性。接下来就是执行一系列node_modules安装以及打包构建项目的命令。值得一提的是插件支持npm,yarn,bower,grunt,gulp,jspm,karma以及webpack提供了诸多的前端构建的选择。


<plugin>

   ……

   <executions>

       <execution>

           <id>install node and npm</id>

              <goals>

                  <goal>install-node-and-npm</goal>

              </goals>

              <configuration>

                  <nodeVersion>v7.4.0</nodeVersion>

                  <npmVersion>4.0.5</npmVersion>

              </configuration>

        </execution>

        <execution>

            <id>npm install</id>

            <goals>

               <goal>npm</goal>

            </goals>

            <configuration>

               <arguments>install</arguments>

            </configuration>

            </execution>

            <execution>

               <id>npm build</id>

               <goals>

                  <goal>npm</goal>

               </goals>

               <configuration>

                  <arguments>run build</arguments>

               </configuration>

         </execution>

    </executions>

</plugin>

代码示例-2


代码示例-3中,通过downloadRoot可以切换NodeJS下载的镜像来源,若出现国外镜像无法使用的状况时,需要切换国内镜像。


<execution>

    <id>install node and npm</id>

    <goals>

       <goal>install-node-and-npm</goal>

    </goals>

    <configuration>

       <nodeVersion>v7.4.0</nodeVersion>

       <npmVersion>4.0.5</npmVersion>

       <downloadRoot>http://npm.taobao.org/mirrors/node/<downloadRoot>    

     </configuration>

</execution>

代码示例-3


当然也可以像代码示例-4中一样指定NodeJS以及NPM的镜像。


<plugin>

    <groupId>com.github.eirslett</groupId>

    <artifactId>frontend-maven-plugin</artifactId>

       <version>1.4</version>

       <configuration>

           <installDirectory>target</installDirectory>

           <workingDirectory>src/main/static/</workingDirectory>

           <nodeDownloadRoot>http://npm.taobao.org/mirrors/node/<nodeDownloadRoot>

            <npmDownloadRoot>http://npm.taobao.org/mirrors/npm/<nopmDownloadRoot>

       </configuration>

       ……

</plugin>

代码示例-4


注意

插件会将NodeJS下载到Maven本地仓库中缓存起来,再次打包时会直接取用缓存中的NodeJS包来打包。

这样就造成了首次下载失败,再次下载需要删除掉本地缓存。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Maven中前端构建实践 的相关文章

随机推荐

  • [网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster原理详解

    Web渗透技术的核心是发现Web漏洞 发现漏洞有手工和软件自动化扫描两种方式 对于用户验证漏洞 用户凭证管理问题 权限特权及访问控制漏洞 缓存漏洞 跨站脚本漏洞 加密漏洞 路径切换漏洞 代码注入漏洞 配置漏洞 数据和信息泄露 输入验证码漏洞
  • CA证书服务搭建

    准备一 域服务搭建 步骤一 搭建CA证书服务器 设置固定IP地址 192 168 0 与主机名 DC 打开服务器管理器 gt 点击添加角色和功能 步骤二 一路回车到达选择服务器角色位置 选中Active Directory域服务与Activ
  • 动态库装载及 dlsym的RTLD_NEXT参数详解

    在看公司spp框架代码的时候发现了如下一段宏定义 其中的dlsym函数及其RTLD NEXT参数的含义不是很明白 于是网上搜了下这里做个记录 define mt hook syscall name do if g mt syscall ta
  • 扔掉工具类!MyBatis 一个简单配置搞定加密、解密,好用!

    程序员的成长之路 互联网 程序员 技术 资料共享 关注 阅读本文大概需要 3 5 分钟 来自 https juejin cn post 6963811586184052767 目录 一 背景 二 解决方案 三 需求 四 实现思路 五 实现代
  • spring cloud alibaba 学习(二十五)nacos 服务地址动态更新

    目录 前言 服务地址动态更新 前言 通过配置endpoint来实现服务地址的动态更新 服务地址动态更新 1 在 NacosConfigBootstrapConfiguration 创建 NacosConfigManager 的过程中 会创建
  • Unity PlayerPrefs、JsonUtility

    Unity中有两个常用的数据存储方式 PlayerPrefs和JsonUtility PlayerPrefs PlayerPrefs是Unity内置的一种轻量级数据存储方式 可用于存储少量的游戏数据 如分数 解锁状态等 使用PlayerPr
  • LPDDR4协议规范之 (六)刷新

    LPDDR4协议规范之 六 刷新 刷新命令 刷新计数器 刷新时序 刷新前时序 刷新后时序 全存储体刷新时序 tRFCab tRFCpb 自刷新 自刷新期间进入掉电模式 自刷新中止 刷新命令 REFRESH命令在时钟的第一个上升沿以CS HI
  • GDI+ 中 Pen 使用总结

    背景 图形类 Graphics 是 GDI 的核心 它提供绘制图形 图像和文本的各种方法 Graphics 中使用 DrawString 方法在指定位置绘制文本或者在一个指定矩形内绘制文本 所有的 Graphics 类的绘制方法都得配合 P
  • MXNet简介

    MXNet是一个十分优秀的深度学习框架 目前包含了许多语言接口 如Python C Scala R等 目前 MXNet版本已经更新到1 3 0 本系列文章主要使用Python接口 在MXNet官网 1 上 官方建议新手使用Python接口
  • 网站代理是什么?有什么需要注意的?

    如今 网站代理已经成为一种不可或缺的经营方式 无论是企业还是个人 都需要通过代理来获得更多的流量和市场份额 一 网站代理的优势 网站代理的优势在于能够为您提供更加专业 周到的服务 这些优势包括 1 丰富的内容资源 能够满足客户对不同领域信息
  • Java-按照指定小时分割时间段

    按照指定小时分割时间段 param dateType 类型 M D H N gt 每月 每天 每小时 每分钟 param dBegin开始时间 param dEnd结束时间 param time 指定小时 如 1 2 3 4 return
  • 变分推断学习

    https zhuanlan zhihu com p 401456634 变分推断 1 变分推断的背景 在机器学习中 有很多求后验概率的问题 求后验概率的过程被称为推断 Inference 推断分为精确推断和近似推断 精确推断一般主要是根据
  • H5播放之Rtsp转Websocket点播录像抓拍

    H5播放之Rtsp转Websocket点播录像抓拍 HLS的延时 websocket播放 实现思路 广大网友们 很久没上CSDN了 暨上次RTSP转HLS文章发布以来 一直还有一个问题没有解决 如何避免HLS切片带来的不可避免的高延时 HL
  • 浅谈PCA 人脸识别

    前几天讨论班我讲了基于PCA的人脸识别 当时我自己其实也只是知道这个算法流程 然后基于该算法利用c 实现了 效果还不错 后来跟师兄一起讨论的时候 才发现这个PCA还是有相当深刻的意义 PCA的算法 矩阵C AAT A的每一列是一张人脸注 将
  • Java的基础语法

    1 关键字介绍 1 Java 中一些赋以特定的含义 用做专门用途的字符串称为关键字 keyword 2 所有Java关键字都是小写英文字符串 2 Java变量 1 Java变量是程序中最基本的存储单元 其要素包括变量名 变量类型和作用域 2
  • c语言用指针找最大数,C语言,用指针。求输入20个数,依次输出这几个数,求最大值,最小值。...

    满意答案 yuab0p0dpi3 2013 11 22 采纳率 53 等级 13 已帮助 13064人 include include define LENGTH 20 void main int pBuff int malloc size
  • FTTR(Fiber To The Room)组网详解

    FTTR Fiber To The Room 是一种新型的光纤宽带接入技术 主要用于宽带网络覆盖范围有限 带宽瓶颈较严重的酒店 公寓 医院等场所 FTTR技术可以将光纤信号传输到用户房间内 实现高速 稳定的网络接入 提高用户体验 下面我们详
  • Python的最大递归深度

    import sys old sys getrecursionlimit print old 1000 可能是个估计值 我不清楚我没查 报错范围总是比限制要小2 我的电脑上 我不知道为什么 感兴趣可以查一查 sys setrecursion
  • Anaconda的使用

    1 anaconda介绍 Python虽然是一门优秀的程序语言 但其拥有出色的数据处理能力 尤其是在数据量巨大的时候 因而也吸引了不少数据分析人员的关注和使用 Python的数据处理能力主要依赖于NumPy SciPy Matplotlib
  • 在Maven中前端构建实践

    NodeJS为前端技术的发展带来了一次革新 层出不穷的前端库 框架以及打包工具让大家应接不暇 然而这使得前端技术越来越依赖于NodeJS 基于NodeJS编写的前后台项目可以使用同一编译或者打包工具进行管理从而做到无缝的前后端版本控制以及联