Verzování a minifikace skriptů
Už jste někdy opravili chybu tak, že jste odbyli testery nebo dokonce samotné uživatele se slovy „refrešni si browser“, „vymaž si cache“… ? To je výmluva na úrovni: můj domácí úkol mi sežral pes. Jistě, můžete přejmenovávat soubory nebo adresáře. Kdo by to ovšem dělal, že? Nehledě na možné zavlečení chyby. Ukáži vám způsob, jak verzovat JavaScripty a CSSka pomocí mavenu.
U knihoven třetích stran, jako například jQuery, jména zachováme,. Tam je cachování žádoucí. Spolu s verzováním sloučíme více souborů do jednoho. Pro vývoj je sice kvůli lepší orientaci v kódu vhodné rozdělit logiku do několika souborů, ale v produkci nám to generuje zbytečné requesty na server. A v neposlední řadě byste mohli požadovat obfuskaci jakožto znesnadnění případného reversního inženýrství případně hackování.
Konfigurace
<%@ page contentType="text/html;charset=UTF-8" language="java" %> | |
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> | |
<html> | |
<head> | |
<title>Minification sample</title> | |
<c:choose> | |
<c:when test="${environment == 'development'}"> | |
<link rel="stylesheet" href="<c:url value="/gui/css/first.css" />" /> | |
<link rel="stylesheet" href="<c:url value="/gui/css/second.css" />" /> | |
</c:when> | |
<c:otherwise> | |
<link rel="stylesheet" href="<c:url value="/gui/css/minified.${version}.css" />" /> | |
</c:otherwise> | |
</c:choose> | |
</head> | |
<body> | |
<h1>Minification sample</h1> | |
<button id="button1">Button 1</button> | |
<button id="button2">Button 2</button> | |
<script type="text/javascript" src="<c:url value="/gui/js/jquery-1.9.0.min.js" />"></script> | |
<c:choose> | |
<c:when test="${environment == 'development'}"> | |
<script type="text/javascript" src="<c:url value="/gui/js/custom_script1.js" />"></script> | |
<script type="text/javascript" src="<c:url value="/gui/js/custom_script2.js" />"></script> | |
</c:when> | |
<c:otherwise> | |
<script type="text/javascript" src="<c:url value="/gui/js/minified.${version}.js" />"></script> | |
</c:otherwise> | |
</c:choose> | |
</body> | |
</html> |
<plugin> | |
<groupId>net.alchim31.maven</groupId> | |
<artifactId>yuicompressor-maven-plugin</artifactId> | |
<version>1.3.0</version> | |
<executions> | |
<execution> | |
<phase>generate-resources</phase> | |
<goals> | |
<goal>compress</goal> | |
</goals> | |
</execution> | |
</executions> | |
<configuration> | |
<jswarn>false</jswarn> | |
<suffix>.min</suffix> | |
<aggregations> | |
<aggregation> | |
<output> | |
${project.build.directory}/${project.build.finalName}/gui/js/minified.${version}.js | |
</output> | |
<includes> | |
<include>**/custom_script1.min.js</include> | |
<include>**/custom_script2.min.js</include> | |
</includes> | |
</aggregation> | |
<aggregation> | |
<output> | |
${project.build.directory}/${project.build.finalName}/gui/css/minified.${version}.css | |
</output> | |
<includes> | |
<include>**/*.min.css</include> | |
</includes> | |
</aggregation> | |
</aggregations> | |
</configuration> | |
</plugin> |
Celý funkční příklad na GitHubu.
Závěr
Pevně věřím, že budu narážet na čím dál tím méně projektů, které zatím verzování skriptů neřeší. A jaký plugin používáte vy?