10

Estoy buscando maneras de minificar los archivos javascript como parte de nuestro proceso de CI, para que podamos usar los archivos no minificados en desarrollo y hacer que se compriman automáticamente cuando se despliegan a la puesta en escena y servidores en vivo.Integración de Google Closure Compiler con MS Build en un servidor de compilación

Esto es para un sitio ASP.NET; usamos Hudson como un servidor de compilación.

Estoy intrigado por el compilador de cierre de Google, y me he encontrado con este .Net MSBuild Google Closure Compiler Task, pero no parece ser muy utilizado. ¿Hay mejores opciones para utilizar con MSBuild, utilizando Closure o herramientas alternativas de minificación?

Respuesta

8

Hemos estado usando Closure Compiler desde hace algún tiempo en un proyecto basado en .NET.

Inicialmente, usamos un simple archivo .proj de MSBuild que invocaba directamente los scripts de Python. Por ejemplo, nosotros hacemos deps.js con algo como lo siguiente:

<PropertyGroup> 
    <ScriptDirectory>yourprojectname</ScriptDirectory> 
    <ClosureLibrary>closure</ClosureLibrary> 
    <CalcDeps>$(ClosureLibrary)\bin\calcdeps.py</CalcDeps> 
</PropertyGroup> 

<Target Name="Deps"> 
    <Exec Command="$(CalcDeps) -o deps -p $(ScriptDirectory) -d $(ClosureLibrary) --output_file=$(ScriptDirectory)\deps.js" /> 
</Target> 

La construcción actual es más compleja, pero todavía relativamente sencillo (suponiendo que eres inteligente MSBuild). Simplemente utilizamos diferentes tipos de grupos de elementos para cada parte relevante de la invocación del script.

<Target Name="Build" DependsOnTargets="Init;FindCompiler"> 
    <PropertyGroup Condition="'@(Extern)' != ''"> 
    <Externs>-f [email protected](Extern, ' -f --externs=')</Externs> 
    </PropertyGroup> 
    <PropertyGroup Condition="'@(Define)' != ''"> 
    <Defines>-f [email protected](Define, ' -f --define=')</Defines> 
    </PropertyGroup> 
    <PropertyGroup Condition="'@(Compile)' != ''"> 
    <Compile>-i @(Compile, ' -i ')</Compile> 
    </PropertyGroup> 
    <Exec Command="$(CalcDeps) $(Compile) -o compiled -c $(ClosureCompiler) -p $(ClosureLibrary) -p $(ScriptDirectory) $(Externs) $(Defines) -f @(CompilerOption, ' -f ') --output_file $(OutputFile)" /> 
</Target> 

Esto era bastante simple que no nos molestamos en busca de una tarea, o tratando de invertir en la construcción de nuestra propia. El cierre es un proyecto bastante rápido, por lo que es bueno estar en una situación en la que no dependas demasiado de sistemas de compilación de terceros, especialmente uno que parezca no ser mantenido (la tarea que vinculaste).

Ahora, he estado hablando en tiempo pasado porque nuestro sistema de compilación ha migrado un poco. Específicamente, a medida que nuestro proyecto siguió creciendo, se hizo cada vez más importante dividir las diferentes partes de nuestro código script en módulos. Hacer esto con los scripts de Cierre listos para usar sería una verdadera pesadilla. Por lo tanto, decidimos pasar a plovr (http://plovr.com/), lo que hace que el código de partición en módulos sea muy simple. plovr se mantiene muy activamente y fue creado por Michael Bolin, quien literalmente escribió el libro sobre Closure (también muy recomendado).

Todavía envolvemos esto usando el mismo archivo MSBuild. Básicamente, las cosas que estábamos definiendo en los grupos de artículos se mueve a un archivo plovr-config.js, y la invocación se vuelve mucho más sencillo así:

<Target Name="Build" DependsOnTargets="Init;FindPlovr"> 
    <Exec Command="$(Plovr) build plovr-config.js" /> 
</Target> 

Hay algunas otras características interesantes soportadas por plovr, como el tamaño informes y gráficos de módulos, pero incluso sin ellos estamos muy, muy satisfechos con nuestra configuración actual.

+0

Gracias por la respuesta detallada. Vamos a intentar esto. –

+0

Si alguien está interesado, escribí una tarea MSBuild rápida y sucia para el compilador de cierre. El principal punto de interés es que utiliza una versión .Net del compilador (usando IKVM), por lo que se ejecuta en proceso: https://github.com/unintelligible/ClosureCompilerMsBuild (también tiene la opción de enviar a la versión alojada compilador, aunque la versión en proceso es, obviamente, bastante más rápida). – zcrar70

+0

Soy un novato total de MSBuild, pero no sé cómo hacer que tu código funcione con plovr. ¿Con qué llené $ (Plovr) con. He intentado con la línea directa '' pero mantener obteniendo el código de salida 1 cuando publico mi proyecto. – Ally

1

Hay SquishItDetails que es un compresor en tiempo de ejecución, pero bastante bien.

Cuestiones relacionadas