不显眼的方式来组合和压缩javascript / css用于java / spring / maven应用程序?

2022-09-04 01:51:11

我想添加某种库,或maven插件,或“某些东西”来组合和压缩我的javascript和css源文件。

但是,我认为这很难用Java不显眼地做到这一点。Rails的人几乎已经解决了这个问题...它使用未连接/未压缩的文件进行开发,然后在生产过程中压缩所有内容。它不显眼地做到这一点,因为您不必更改html标头或类似的东西 - 它适用于测试和生产。这或多或少是我想要的。它甚至存在于Java空间中吗?

我最不想看到的是注释和取消注释用于开发和生产的freemarker /html代码行 - 我希望一切都是一样的。理想情况下,我希望能够让Tomcat保持运行状态并编写我的javascript和css,并立即看到我的更改 - 没有延迟或打嗝。我也不想每次进行更改时都必须手动运行命令来生成新的javascript...或者甚至让一些守护进程不断更新它(因为那样在我测试时它可能不是即时的)。同时,如果我要打包我的生产战争,我希望它使用连接和压缩的文件。

这有可能吗?如果是这样,我应该查看什么工具?我知道有相当多的人会做一些这样的事,但他们在“不显眼”方面做得不够。

谢谢


答案 1

对我有用的解决方案是使用(groupId是),但仅在为生产而构建时。使用 build 属性指定您是否处于开发模式。链接到插件maven-minify-plugincom.samaxes.maven

然后你可以有这样的东西(我不知道freemarker,所以我只是粘贴一些JSP代码,但我相信它可以很容易地转换):

<c:choose>
    <c:when test="${developmentMode}">
        <link rel="stylesheet" type="text/css" href="<c:url value="/css/custom1.css"/>"/>
        <link rel="stylesheet" type="text/css" href="<c:url value="/css/custom2.css"/>"/>
        <link rel="stylesheet" type="text/css" href="<c:url value="/css/another1.css"/>"/>
        <link rel="stylesheet" type="text/css" href="<c:url value="/css/another2.css"/>"/>
        <script type="text/javascript" src="<c:url value="/js/mylibrary.js"/>"></script>
        <script type="text/javascript" src="<c:url value="/js/more.js"/>"></script>
        <script type="text/javascript" src="<c:url value="/js/util.js"/>"></script>
        <script type="text/javascript" src="<c:url value="/js/whatever.js"/>"></script>
        <script type="text/javascript" src="<c:url value="/js/more.js"/>"></script>
    </c:when>
    <c:otherwise>
        <link rel="stylesheet" type="text/css" href="<c:url value="/css/minified.css"/>"/>
        <script type="text/javascript" src="<c:url value="/js/minified.js"/>"></script>
    </c:otherwise>
</c:choose> 

这样,在开发过程中使用非缩小/组合的JS / css,而缩小的css仅在为生产而构建时使用。

编辑:按照此处的要求,是在ServletContext上公开Spring定义的bean的代码:

<bean class="org.springframework.web.context.support.ServletContextAttributeExporter">
    <property name="attributes">
        <map>
            <!-- Obviously this can be changed to read from properties file -->
            <entry key="developmentMode" value="false" /> 
        </map>
    </property>
</bean>

答案 2

Jawr 是一个提供 css/js 文件的压缩和合并的库。它为 html 包含语句提供了一个标记。这使得可以使用相同的未修改的JSP页面进行开发(使用未修改的css / js)和生产(合并和缩小)。

wro4j接缝到类似的功能。