frontend-maven-plugin插件问题解决1.插件介绍
frontend-maven-plugin为项⽬本地下载/安装Node和NPM,运⾏npm install命令。
它适⽤于Windows,OS X和Linux。
这个插件也可以下载Node和Yarn,
然后运⾏yarn install你的项⽬。
使⽤这个插件⽬的:
让你的前端和后端版本尽可能分开,通过减少它们之间的交互量到最低限度; 仅使⽤1个插件。
让您在构建过程中使⽤Node.js及其库,⽽⽆需为构建系统全局安装Node / NPM
让您确保在每个构建环境中运⾏的Node和NPM的版本是相同的
2.插件使⽤⽰例
我所在的项⽬l配置如下:
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.6</version>
<configuration>
<workingDirectory>${project.build.directory}</workingDirectory>
</configuration>
<executions>
<execution>
<phase>prepare-package</phase>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>v8.12.0</nodeVersion>
<npmVersion>6.4.1</npmVersion>
</configuration>
</execution>
<execution>
<phase>prepare-package</phase>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
</executions>
</plugin>
3.离线环境打包问题解决⽅法
该插件在打包security-admin⼯程时,
要求联⽹下载⽂件,并且之后的npm需要连接远程仓库,
⽽我们的⼯程是在内⽹打包的,不能随意连接外⽹,
从⽽会导致打包失败。
使⽤的打包测试命令:
mvn package -pl security-admin -am -DskipTests
离线打包的解决⽅法有两种:
3.1.修改downloadRoot改变下载的地址,使⽤国内或者内⽹URL:
下载node-v8.12.安装包,默认连接如下⽹址:
<!-- optional: where to download node and npm from. Defaults to /dist/ -->
<downloadRoot>/dist/</downloadRoot>
/dist/v8.12.0/node-v8.12.
3.1.1.如果⽆法连接国外⽹址,可以使⽤国内淘宝的⽹址:
<downloadRoot>/mirrors/node/</downloadRoot>
/mirrors/node/v8.12.0/node-v8.12.
downloadRoot的配置参考如下:
<execution>
<phase>prepare-package</phase>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>v8.12.0</nodeVersion>
<npmVersion>6.4.1</npmVersion>
<downloadRoot>/mirrors/node/</downloadRoot>
</configuration>
</execution>
注意downloadRoot不⽀持本地⽂件⽬录
3.1.2.如果国内⽹址也⽆法使⽤,只能连接内⽹
可以使⽤本地启动tomcat的⽅式,将要下载的安装包提前下好,
放到tomcat的webapp⽬录下,启动tomcat提供下载服务,
详细步骤请参考:
然后将downloadRoot改为tomcat服务的路径,从tomcat下载相应的包,解决问题。
3.2.使⽤本地⽬录缓存,则不需要联⽹下载
查看打包过程发现如下⽇志:
[INFO] Downloading /dist/v8.12.0/node-v8.12. to /home/maven/repository/com/github/eirslett/node/8.12.0/node-8.12.
插件从指定⽹址下载node-v8.12.下载⽂件到本地缓存⽬录后,
并且改名为node-8.12.,
当每次开始编译时,插件会先查看缓存⽬录⽂件是否已经存在,
存在则不会重新下载,不存在才会去联⽹,
所有可以先从其他路径获取需要的安装包⽂件,
⼿动把node-v8.12.放到对应的⽬录:
/home/maven/repository/com/github/eirslett/node/8.12.0/
上⾯需要的npm进⾏同样的操作即可:
[INFO] Downloading /npm/-/npm-6. to /home/maven/repository/com/github/eirslett/npm/6.4.1/npm-6.4.
mkdir -p /home/maven/repository/com/github/eirslett/npm/6.4.1/
mv npm-6. npm-6.4.
3.3.npm使⽤内⽹的制品库作为远程仓库地址
在pom中插件的配置项中增加如下两个配置项:
vim l
<npmRegistryURL>10.41.103.97:443/artifactory/api/npm/zenap-npm-virtual</npmRegistryURL>
<arguments>install --strict-ssl=false</arguments>
3.3.1.如果未设置npmRegistryURL则会报如下错误,因为内⽹⽆法访问到外⽹远程仓库:
[INFO] --- frontend-maven-plugin:1.6:npm (npm install) @ security-admin-web ---
[INFO] Running 'npm install' in /home/compile/ranger/security-admin/target
[ERROR] npm ERR! code ENOTFOUND
[ERROR] npm ERR! errno ENOTFOUND
[ERROR] npm ERR! network request to /requirejs failed, reason: getaddrinfo ENOTFOUND :443
js arguments[ERROR] npm ERR! network This is a problem related to network connectivity.
[ERROR] npm ERR! network In most cases you are behind a proxy or have bad network settings.
[ERROR] npm ERR! network
[ERROR] npm ERR! network If you are behind a proxy, please make sure that the
[ERROR] npm ERR! network 'proxy' config is set properly.  See: 'npm help config'
[ERROR]
[ERROR] npm ERR! A complete log of this run can be found in:
[ERROR] npm ERR!    /root/.npm/_logs/2018-10-15T08_23_03_167Z-debug.log
[INFO] -------------------------------------------------------------------
3.3.2.改为内⽹的仓库后,还是报错,⽆法解析返回的html⽂件:
17 http fetch GET 200 10.41.103.97:443/artifactory/public-npm-remote-cache/requirejs 64ms
18 silly fetchPackageMetaData error for requirejs@^2.3.6 Unexpected token < in JSON at position 0 while parsing near '<!DOCTYPE '
3.3.3.如果不配置设置strict-ssl为false,则打包时会报证书不存在错误:
23 verbose stack FetchError: request to 10.41.103.97:443/artifactory/api/npm/zenap-npm-virtual/requirejs failed, reason: Hostname/IP doesn't match certificate's altnames: "IP: 10.41.103.97 is not in the cert's list: "设置strict-ssl为false关闭强制SSL检查:
<arguments>install --strict-ssl=false</arguments>
实际上这个参数执⾏⼀次就会改变全局变量,
但是重复执⾏也没有问题,可以写⼊到pom中执⾏,
防⽌第⼀次编译的时候没有该配置项导致失败。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。