如何在Maven构建中排除node_modules文件夹出WAR包?
如何正确排除Maven WAR包中的node_modules文件夹
看起来你在使用maven-war-plugin的packagingExcludes配置时遇到了问题——明明添加了规则,构建还是把node_modules包含进去了。别担心,我们来一步步解决这个问题。
问题根源分析
你的配置里有两个小问题导致规则不生效:
- 多余的空格:你写的
<packagingExcludes> %regex[node_modules] </packagingExcludes>里,%regex[...]前后的空格会被当作匹配规则的一部分,而你的node_modules路径里并没有空格,所以自然匹配不上。 - 正则表达式范围太窄:仅写
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
相关产品推荐
相关产品推荐

