You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Maven构建中排除node_modules文件夹出WAR包?

如何正确排除Maven WAR包中的node_modules文件夹

看起来你在使用maven-war-plugin的packagingExcludes配置时遇到了问题——明明添加了规则,构建还是把node_modules包含进去了。别担心,我们来一步步解决这个问题。

问题根源分析

你的配置里有两个小问题导致规则不生效:

  1. 多余的空格:你写的<packagingExcludes> %regex[node_modules] </packagingExcludes>里,%regex[...]前后的空格会被当作匹配规则的一部分,而你的node_modules路径里并没有空格,所以自然匹配不上。
  2. 正则表达式范围太窄:仅写node_modules只会匹配名字完全是node_modules的单个文件,而不会匹配整个文件夹及其下的所有内容。

解决方案

我们有两种可靠的方式来正确排除node_modules,推荐用第一种(更直观):

方法1:使用Ant风格通配符(推荐)

maven-war-plugin支持Ant风格的路径通配符,写法更简单易懂,适合这种场景。修改你的插件配置如下:

<plugin>
  <artifactId>maven-war-plugin</artifactId>
  <version>3.1.0</version>
  <configuration>
    <!-- 排除webapp根目录下的node_modules文件夹及其所有内容 -->
    <packagingExcludes>node_modules/**</packagingExcludes>
  </configuration>
</plugin>
  • node_modules/**表示匹配node_modules文件夹下的所有文件和子文件夹,包括文件夹本身。
  • 因为你的node_modules在src/main/webapp下,对应WAR包根目录的node_modules,这个规则刚好能精准匹配。

方法2:使用正确的正则表达式

如果你坚持用正则,需要修正表达式并去掉多余空格,确保能匹配整个文件夹路径:

<plugin>
  <artifactId>maven-war-plugin</artifactId>
  <version>3.1.0</version>
  <configuration>
    <!-- 匹配任意包含node_modules路径的内容,确保排除整个文件夹 -->
    <packagingExcludes>%regex[.*node_modules/.*]</packagingExcludes>
  </configuration>
</plugin>
  • .*node_modules/.*会匹配所有包含node_modules/的路径,覆盖文件夹本身和所有子内容。
  • 注意不要加多余空格,否则规则会失效。

验证是否生效

修改配置后,执行mvn clean package构建项目,然后解压生成的WAR包,检查根目录下是否还有node_modules文件夹。如果没有,说明配置生效了。

内容的提问来源于stack exchange,提问作者kristian nissen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:01:38