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

10
我正在研究如何在CI过程中缩小JavaScript文件的方法,以便我们可以在开发中使用未经缩小的文件,并在部署到暂存和生产服务器时自动压缩它们。
这是针对ASP.NET网站的;我们使用Hudson作为构建服务器。
我对Google Closure编译器很感兴趣,我找到了这个.Net MSBuild Google Closure Compiler Task,但似乎并没有被广泛使用。是否有更好的选项可用于与MSBuild一起使用,使用Closure或其他缩小工具?
4个回答

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>

实际构建更为复杂,但仍然相对简单(假设您熟悉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>

这很简单,我们没有费力寻找任务或尝试投资建立自己的任务。Closure是一个发展迅速的项目,因此最好处于不过度依赖任何第三方构建系统的情况,特别是看起来未得到维护的系统(你提供的任务)。
现在,我用过去时来说话,因为我们的构建系统已经有所迁移。具体而言,随着我们的项目不断增长,将脚本代码的不同部分分成模块变得越来越重要。使用默认的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>

plovr支持一些其他很酷的功能,比如大小报告和模块图表,但即使没有这些功能,我们对我们目前的设置非常满意。


感谢您提供详细的答案。我们会尝试一下。 - Herb Caudill
如果有人感兴趣,我写了一个快速而简单的 MSBuild 任务来使用 Closure 编译器。最值得注意的是它使用了编译器的 .Net 版本(使用 IKVM),因此可以在进程内运行 - https://github.com/unintelligible/ClosureCompilerMsBuild (它还有将代码提交到托管版本的选项,但是进程内版本显然要快很多)。 - zcrar70
我对MSBuild完全不熟悉,但我无法弄清楚如何使您的代码与plovr一起工作。我应该用什么填充$(Plovr)?我尝试了直接使用以下命令行<Exec Command="&quot;C:\Program Files (x86)\Java\jre7\bin\java.exe&quot; -jar plovr.jar build plovr-config.js" />,但在发布项目时一直收到退出代码1的错误提示。 - Ally

1

最明显的选择是YUI Compressor,它稳定可靠。

它有一个 .Net 版本:Yahoo! UI Library: YUI Compressor for .Net,附带了一个 mbsbuild 任务。

此外,使用原版(Java)也很容易,只需使用 Exec 任务即可,唯一的缺点是需要 Java 依赖。


1

SquishIt Details,它是一个运行时压缩器,但做得非常好。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接