Plugin Maven para versionar y minificar javascript
git build (3)
Aquí hay un nuevo plugin Maven que apunta a esta tarea: http://mojo.codehaus.org/webminifier-maven-plugin/
Aplicación de JavaScript de una sola página
He creado una aplicación web de una sola página sofisticada ajax que utiliza un servicio web back-end RESTful que presta servicios a JSON. El javascript está dividido en muchos archivos diferentes, cada archivo representa algún tipo de característica o componente.
Mientras que el servicio ha estado en pruebas alpha , acabo de servir todos estos archivos por separado sin minificación. Pero ahora que me gustaría lanzar una versión beta , realmente necesito combinar archivos, minimizarlos y versionarlos. Quiero agregar esto a mi proceso de compilación, usando Maven.
Tipos de archivos Javascript
Estoy usando los siguientes "tipos" de archivos javascript, de los cuales el # 3 y el # 4 son mis inquietudes:
- Archivos externos, tales como jquery y jquery-ui servidos desde Google CDN. Rara vez cambian estas versiones, se pueden manejar de forma manual.
- Complementos de Jquery que estoy hospedando, como fullcalendar o ui-layout. Una vez más, raramente los actualizo a nuevas versiones y puedo manejarlos manualmente.
- Código de javascript de aplicación completa. JavaScript personalizado que se extiende a través de muchos archivos y puede cambiar ocasionalmente. Todos estos archivos deben cargarse para que la aplicación funcione.
- Código javascript específico de la función. JavaScript personalizado que se carga a pedido cuando se solicita una función específica. Este código puede cambiar con bastante frecuencia y no se carga al inicio.
Desarrollar objetivos
Me gustaría hacer lo siguiente durante mi proceso de compilación:
- Concatenar todos los archivos javascript de tipo 3 juntos, minimizarlos y guardarlos como un solo archivo con un número de versión. Por ejemplo:
app-2.0.6.min.js
, donde 2.0.6 es la versión del proyecto maven. - Todos los archivos de tipo 4 deben ser minificados individualmente y guardados como archivos separados con números de versión en el nombre. Por ejemplo:
feature-abc-56ab32de29.min.js
, donde 56ab32de29 es el número de versión de ese archivo específico. - Actualice archivos HTML con etiquetas
<script>
para apuntar a archivos javascript con los números de versión correctos. - Actualice los archivos Javscript que cargan el tipo 4 y los archivos javascript apuntan a las versiones correctas.
Preguntas
¿Hay un complemento maven que ayude con la concatenación?
¿Hay un complemento maven que ayude con la minificación? Idealmente, me gustaría utilizar Google Closure Compiler, pero trabajaría con otros si fuera más simple.
¿Hay un complemento maven que ayude con el control de versiones?
¿Hay alguna manera de que los archivos javascript tipo 4 tengan números de versión independientes? Idealmente, si un archivo no cambia entre la versión 2.0.5 y 2.0.6, no hay necesidad de que los usuarios descarguen una nueva versión y su versión en caché funcionaría bien. Estoy usando GIT para control de fuente, entonces ¿habría alguna manera de usar el código hash GIT de un archivo para versionar?
¿Hay alguna solución que comprima el javascript que está en línea en los archivos HTML normales sin matar al HTML?
¿Hay alguna solución que pueda comprimir y versionar mis archivos CSS también?
Eche un vistazo al yuicompressor-maven-plugin . Puede agregar varios archivos js (y también css) y minimizarlos y ofuscarlos.
He incorporado con éxito la optimización RequireJS (utiliza el compilador de cierre de Google + concatenación) en un entorno Maven (para una sola página de la aplicación JS). Vea mi pregunta y la respuesta de seguimiento para más detalles: Recopilación RequireJS en el proyecto Maven con dependencias JS externas
Probablemente podrías ampliar eso a la versión y archivar los artefactos JS minificados.