gpt4 book ai didi

javascript - 如何使用 Maven 缩小过滤后的 javascript 文件?

转载 作者:可可西里 更新时间:2023-11-01 01:41:15 25 4
gpt4 key购买 nike

我有一个 javascript 文件,用于使用 Google Analytics 跟踪事件。我为登台和生产环境创建了不同的帐户。调用 GA 代码的脚本有一个占位符用于我的帐户 ID。帐户 ID 已在过滤器文件中指定。使用 maven-war 插件中的 webResources 元素,我们能够成功替换最终 WAR 文件中的属性。

现在,我们还使用 maven-yuicompressor 插件来缩小和聚合我们所有的 javascript 文件。问题是,如果我将 minify 目标的执行附加到包阶段,则在 Javascript 被缩小之前创建 WAR。如果我之前将缩小目标附加到任何内容,则直到缩小生成无效文件时才应用过滤器。

因此,我正在寻找一种在 WAR 插件复制过滤后的 JS 文件和创建 WAR 文件之间运行缩小目标的方法。以下是我的 pom.xml 的相关部分:

          <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<resource>
<directory>src/main/webapp/js</directory>
<targetPath>js</targetPath>
<filtering>true</filtering>
</resource>
</webResources>
</configuration>
</plugin>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<goals>
<goal>compress</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
<configuration>
<linebreakpos>-1</linebreakpos>
<nosuffix>true</nosuffix>
<force>true</force>
<aggregations>
<aggregation>
<output>${project.build.directory}/${project.build.finalName}/js/mysite-min.js</output>
<inputDir>${project.build.directory}/${project.build.finalName}/js</inputDir>
<includes>
<include>jquery-1.4.2.js</include>
<include>jquery-ui.min.js</include>
<include>ga-invoker.js</include>
</includes>
</aggregation>
</aggregations>
</configuration>
</plugin>

最佳答案

好问题,artbristol 的好回答,我投了赞成票。这对我帮助很大。为了将来引用,我发布了一个完整的解决方案:

  • 将您的 Javascript 文件放入 src/main/resources/js(或任何适合您需要的文件)
  • 将您的 CSS 文件放入 src/main/resources/css(或任何适合您需要的文件)
  • 资源插件正在过滤您的 javascript 资源并将它们复制到 target/classes/js/
  • Yui 正在 target/classes/js/中获取文件并将它们聚合到 src/main/webapp
  • 您可以使用 jetty:run 测试您的设置。 Jetty 正在提取 src/main/webapp
  • 中的压缩和聚合文件
  • 打包阶段的 war 插件正在获取 src/main/webapp 下的文件
  • 可选的将一个 SCM 忽略文件如 .svnignore.cvsignore 文件放入 src/main/webapp 以排除 所有。来自您最喜欢的 SCM 工具的 js

排除部分是必要的,以避免压缩 src/main/resources 和 src/main/webapp 中的任何内容。 yui 应该只选择已经过滤的文件进行聚合。

<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<goals>
<goal>compress</goal>
</goals>
</execution>
</executions>
<configuration>
<excludes>
<exclude>*/*</exclude>
</excludes>
<force>true</force>
<nosuffix>true</nosuffix>
<removeIncluded>true</removeIncluded>
<aggregations>
<aggregation>
<insertNewLine>true</insertNewLine>
<output>${project.basedir}/src/main/webapp/js/all.js</output>
<includes>
<include>${project.build.directory}/classes/js/file1.js</include>
<include>${project.build.directory}/classes/js/file2.js</include>
</aggregation>
<aggregation>
<insertNewLine>true</insertNewLine>
<output>${project.basedir}/src/main/webapp/css/all.css</output>
<includes>
<include>${project.build.directory}/classes/css/file1.css</include>
<include>${project.build.directory}/classes/css/file2.css</include>
</aggregation>
</aggregations>
</configuration>
</plugin>

为什么要过滤 css 文件?

我用它来像这样引用我的图像

div.header {
background-image: url(/img/background.${project.version}.png)
}

Maven 将我的项目版本过滤到我的 css 文件中。我们的图像服务器上的任何传入请求都被这样过滤

protected void doHttpFilter ( HttpServletRequest request, HttpServletResponse response, FilterChain chain ) throws IOException, ServletException
{
String uri = request.getRequestURI();
if (isStaticRequest(uri))
{
String uriWithoutVersion = stripVersionString(uri);
String versionRequested = getVersionString(uri);
if (version.equals(versionRequested))
{
response.setHeader(CACHE_CONTROL_HEADER_NAME, CACHE_CONTROL_HEADER_VALUE);
response.setHeader(EXPIRES_HEADER_NAME, EXPIRES_HEADER_VALUE);
}
RequestDispatcher dispatcher = request.getRequestDispatcher(uriOhneVersionsnummer);
dispatcher.forward(request, response);
} else {
chain.doFilter(request, response);
return;
}
}

这样浏览器会永久缓存每个文件。但是当我上传一个新版本时,所有文件引用都有一个新版本号,所以浏览器再次获取图像或 css。这对我们减少流量有很大帮助。

关于javascript - 如何使用 Maven 缩小过滤后的 javascript 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6069164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com