Maven插件用于合并和压缩JavaScript代码

22

我有数百个JavaScript文件分布在不同的文件夹层级中,我希望得到两种输出。一种是为了调试目的而连接的版本,另一种是连​​接和缩小的版本。我目前正在使用以下插件,但在这个插件中,我需要提供每个需要缩小的文件。我正在寻找一个只需提供父文件夹并满足上述条件的插件。

<groupId>com.samaxes.maven</groupId>
<artifactId>minify-maven-plugin</artifactId>
<version>1.7</version>

Minify插件基于YUI压缩器,它们都存在漏洞并且无法兼容最新的CSS标准。请参见例如https://github.com/samaxes/minify-maven-plugin/issues/161。请查看我的问题https://stackoverflow.com/q/52229690/421049以尝试找到一个非有漏洞的替代方案。 - Garret Wilson
3个回答

33

YUI压缩Maven插件对我很有效。下面我将展示我所做的一切来使它起作用。

  • 为了连接所有JavaScript文件,我使用了聚合。

元素细节如下:

  • preProcessAggregates - 在缩小之前处理聚合。
  • aggregations - 将多个目录层次结构中的资源聚合到单个文件中。
  • aggregation - 可以在父聚合内有多个聚合元素。
  • insertNewLine - 在文件eof后插入换行符,同时连接/聚合文件。
  • inputDir - 文件将在其中搜索以进行连接/聚合的父目录。
  • sourceDirectory - 文件将在其中搜索以进行缩小的目录。
  • outputDirectory - 缩小后的输出将存放在其中的目录中。
  • nosuffix - 如果设置为true,则插件将不会向缩小的文件添加“-min”。

有两种类型的<exclude>属性:

  • 第一种是聚合的一部分,基本上是从聚合中排除文件。
  • 第二个是插件的一部分,用于排除要缩小的文件。

插件代码如下:

<plugin>
  <groupId>net.alchim31.maven</groupId>
  <artifactId>yuicompressor-maven-plugin</artifactId>
  <version>1.3.2</version>
  <configuration>
    <preProcessAggregates>true</preProcessAggregates>
    <aggregations>
      <aggregation>
        <insertNewLine>true</insertNewLine>
        <output>${basedir}/target/single.js</output>
        <inputDir>${basedir}/src/main/resources/js</inputDir>
        <includes>
          <include>**/*.js</include>
        </includes>
        <excludes>
          <exclude>**/*abc.js</exclude>
          <exclude>**/compressed.css</exclude>
        </excludes>
      </aggregation>
    </aggregations>
    <excludes>
      <exclude>**/*-min.js</exclude>
      <exclude>**/*.min.js</exclude>
      <exclude>**/*-min.css</exclude>
      <exclude>**/*.min.css</exclude>
    </excludes>
    <jswarn>false</jswarn>
    <nosuffix>false</nosuffix>
    <sourceDirectory>${basedir}/target</sourceDirectory>
    <outputDirectory>${basedir}/target</outputDirectory>
  </configuration>
  <executions>
    <execution>
      <id>compress_js_css</id>
      <phase>process-resources</phase>
      <goals>
        <goal>compress</goal>
      </goals>
    </execution>
  </executions>
</plugin>

1
或者,插件可以在这里找到:http://davidb.github.io/yuicompressor-maven-plugin/ - Stephan
为什么@Mady将nosuffix设置为false?通常你只关心部署压缩版本,对吧?http://alchim.sourceforge.net/yuicompressor-maven-plugin/index.html - DPM
YUI Compressor在处理CSS3方面存在严重问题。请参见 https://github.com/yui/yuicompressor/issues/268 和 https://github.com/yui/yuicompressor/issues/313。 - Garret Wilson

15

是的,我在使用它,但不正确。我错过了资源的聚合。 - Mady
3
YUI Compressor 在处理 CSS3 时存在严重问题,详见 https://github.com/yui/yuicompressor/issues/268 和 https://github.com/yui/yuicompressor/issues/313。 - Garret Wilson

4
Mady,Minify Maven插件也支持包含/排除模式。
请查看插件文档中按字典顺序排序的示例页面。

谢谢Samuel,是的,它运行得很好,但是closure jsEngine无法进行缩小,它在某些地方出现了问题。最初,我倾向于使用closure,所以我使用了minify-maven-plugin。 - Mady

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接