18

En un proyecto reciente en el que he estado trabajando en C#/ASP.NET tengo algunos archivos JavaScript bastante complicados y algunas hojas de estilo ingeniosas. Como estos recursos de script crecen en tamaño, is advisable to minify the resources y mantienen sus páginas web lo más claras posible, por supuesto. Conozco a muchos desarrolladores que suministran manualmente sus recursos de JavaScript en compresores después de la depuración y luego implementan sus aplicaciones.Minificación de guiones e integración continua con MSBuild

Cuando se trata de control de fuente y compilaciones automatizadas en el mundo satisfactorio de la integración continua (gracias CruiseControl.NET); la compresión de la mano simplemente no funcionará. La única forma de mantener el control de código fuente y ofrecer recursos comprimidos es mantener JS/CSS fuente & sus hermanos minificados en una estructura de directorios separada. A continuación, registre solo un conjunto de recursos o el otro en código subyacente. Sin embargo, si un desarrollador hace un cambio a la fuente JS/CSS y luego no puede volver a compactarlo y verificar ambas versiones, entonces su línea de código ahora no está sincronizada. Por no mencionar poco elegante.

Estoy pensando que sería bueno escribir un archivo ejecutable personalizado (si aún no existe) para el bloque de tareas CC.NET que encontraría y comprimiría todos los recursos de JavaScript y CSS en el directorio de destino después de la acción de compilación pero antes de publicar asp.net en el asp.net. De esta forma, los desarrolladores solo trabajarían en fuentes JS y CSS y los usuarios solo obtendrían los recursos minificados.

¿Existe alguna aplicación que ya realice esta tarea y, de no ser así, qué tipo de recursos debería buscar instalar en el servidor de compilación para ejecutar CC.NET?

(El closest question que pude encontrar aquí a ésta requiere de NAnt, que no es una opción en mi caso.)

EDIT: Dave Ward tiene ahora un gran artículo sobre how to automatically minify in Visual Studio en su sitio.

+0

por Minify Creo que significa minimizar ... –

+3

No. Me refiero a minify (http://en.wikipedia.org/wiki/Minify), pero creo que es 12 de una o una docena de otra. Creo que esos dos términos son intercambiables. –

Respuesta

24

El MSBuildCommunityTasks Project tiene algunas tareas de MSBuild que pueden hacer lo que está buscando, incluyendo Merge y JSCompress.

Puede agregarlos a su proyecto MSBuild en el objetivo AfterBuild para permitir que el proyecto realice esta acción cada vez que se construya el proyecto y nada quede fuera de sincronización. Su aplicación web podría hacer referencia a la versión compacta para ejecutar, pero los desarrolladores editarían las versiones completas.

No se necesitaría nada más en el servidor, excepto el ensamblado de tareas de comunidad MSBuild. Puede colocar este ensamblaje en su propio árbol de origen y hacer referencia desde allí y su compilación CI debe obtener ese ensamblaje y todo lo que necesita cuando se construye.

+0

Agradable. Me gusta. –

+2

¡Heh, increíble que voy a poner esto en StackOverflow esta noche, y la búsqueda de Google apareció en nuestro sitio! ¡CÓMO IR, ASÍ! Y una buena respuesta, Todd +1 –

+0

Debo añadir que el proyecto de comunidad de tareas msbuild es estelar. Uso el jscompress en nuestros procesos de compilación. Tenga en cuenta que debe dejar el archivo jquery.min fuera de la compresión, ya que se ahogará en él. – BozoJoe

4

Otra JS (y CSS!) Biblioteca de compresión para MSBuild:

http://www.codeplex.com/YUICompressor

Este es un puerto de .NET de la basada en Java Yahoo! compressor.

+0

Nice find Jarrod. Voy a buscar un minificador automatizado de CSS para incorporarlo también en compilaciones automáticas. Este fue un buen descubrimiento. –

+0

Jarrod, ¿pueden echar un vistazo al puerto .NET de YUICompressor (su enlace de arriba). Un nuevo lanzamiento fue eliminado, ayer. La última vez dijeron en un podcast de SO que tenían problemas con eso. Me encantaría ver si esta compilación funciona con su cronograma de implementación ... y si no, publique por qué/qué, etc. :) –

1

No es una respuesta perfecta, pero si está utilizando MVC4 lo han incorporado como una característica nueva. Cuando se ejecuta una configuración de depuración, genera archivos individuales con comentarios, pero cuando se cambia a Release, se agrupan, minimizan y cambian automáticamente las referencias de página a los archivos minificados. Puede configurar paquetes separados para, por ejemplo, jquery y su propio js. Esto funciona con archivos CSS y JS.

http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification

Si MVC4 no funciona para usted, usted también puede encontrar paquetes en Nuget que pueden ayudar como este:

https://www.nuget.org/packages?q=minify

+0

Sí, hay más opciones ahora que cuando esta pregunta se publicó en 2008. –

Cuestiones relacionadas