在构建服务器上集成Google Closure Compiler和MS Build

Her*_*ill 10 msbuild continuous-integration minify google-closure google-closure-compiler

我正在研究如何缩小javascript文件作为CI过程的一部分,以便我们可以在开发中使用未缩小的文件,并在部署到登台和实时服务器时自动压缩它们.

这是一个ASP.NET站点; 我们使用Hudson作为构建服务器.

我对Google Closure编译器很感兴趣,并且我遇到了这个.Net MSBuild Google Closure编译器任务,但它似乎并没有被广泛使用.是否有更好的选择与MSBuild一起使用,使用Closure或其他缩小工具?

Der*_*ger 8

我们一直在基于.NET的项目中使用Closure Compiler一段时间了.

最初,我们使用了一个简单的MSBuild .proj文件,它直接调用了Python脚本.例如,我们将使用以下内容制作deps.js:

<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>
Run Code Online (Sandbox Code Playgroud)

实际构建更复杂,但仍然相对简单(假设您是MSBuild精明).我们只是为脚本调用的每个相关部分使用了不同类型的项目组.

<Target Name="Build" DependsOnTargets="Init;FindCompiler">
  <PropertyGroup Condition="'@(Extern)' != ''">
    <Externs>-f --externs=@(Extern, ' -f --externs=')</Externs>
  </PropertyGroup>
  <PropertyGroup Condition="'@(Define)' != ''">
    <Defines>-f --define=@(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>
Run Code Online (Sandbox Code Playgroud)

这很简单,我们不打算寻找任务,或试图投资建立自己的任务.关闭是一个非常快速发展的项目,所以在你不过度依赖任何第三方构建系统的情况下,特别是那些看起来没有维护的东西(你所链接的任务)是很好的.

现在,我一直在说过去时,因为我们的构建系统已经迁移了一点.具体来说,随着我们的项目不断发展,将脚本代码的不同部分划分为模块变得越来越重要.使用开箱即用的Closure脚本执行此操作将是一场噩梦.因此,我们决定转向plovr(http://plovr.com/),这使得将代码分区为模块变得非常简单.plovr非常积极地维护,由Michael Bolin创建,他在字面上写了关于Closure的书(也是强烈推荐的).

我们仍然使用相同的MSBuild文件包装它.基本上,我们在项目组中定义的东西移动到plovr-config.js文件,调用变得更加简单:

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

plovr还支持其他一些很酷的功能,比如尺寸报告和模块图,但即使没有这些功能,我们也非常非常满意我们当前的设置.