Msbuild 在构建服务器上集成Google Closure编译器和MS Build

Msbuild 在构建服务器上集成Google Closure编译器和MS Build,msbuild,continuous-integration,minify,google-closure-compiler,google-closure,Msbuild,Continuous Integration,Minify,Google Closure Compiler,Google Closure,作为CI过程的一部分,我正在研究缩小javascript文件的方法,以便我们可以在开发中使用未缩小的文件,并在部署到临时服务器和实时服务器时自动压缩这些文件 这是一个ASP.NET网站;我们使用Hudson作为构建服务器 我对谷歌闭包编译器很感兴趣,我也遇到过这个问题,但它似乎没有得到广泛的应用。是否有更好的选项用于MSBuild,使用闭包或其他缩小工具?最明显的选择是,它稳定可靠 它有一个.Net端口: 执行mbsbuild任务的船舶 另外,使用原始(Java)是使用Exec任务,唯一的缺点是

作为CI过程的一部分,我正在研究缩小javascript文件的方法,以便我们可以在开发中使用未缩小的文件,并在部署到临时服务器和实时服务器时自动压缩这些文件

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


我对谷歌闭包编译器很感兴趣,我也遇到过这个问题,但它似乎没有得到广泛的应用。是否有更好的选项用于MSBuild,使用闭包或其他缩小工具?

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

它有一个.Net端口: 执行mbsbuild任务的船舶


另外,使用原始(Java)是使用
Exec
任务,唯一的缺点是它有Java依赖性。

有一个运行时压缩器,但做得很好。

您应该会看到我在上回答的一个非常类似的问题。您应该能够使用此处的详细信息来解决您的问题。

我们已经在一个基于.NET的项目中使用闭包编译器一段时间了

最初,我们使用一个简单的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>

你的项目名
关闭
$(ClosureLibrary)\bin\calcdeps.py
实际构建更加复杂,但仍然相对简单(假设您精通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>

-f--externs=@(Extern,'-f--externs=')
-f--define=@(define,'-f--define=')
-i@(编译,'-i')
这很简单,我们不需要费心寻找任务,也不需要尝试投资建设自己的项目。闭包是一个快速移动的项目,因此最好不要过度依赖任何第三方构建系统,尤其是看起来没有维护的系统(您链接的任务)

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

我们仍然使用相同的MSBuild文件包装此文件。基本上,我们在项目组中定义的内容移动到plovr-config.js文件,调用也变得简单得多:

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


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

感谢您提供详细的答案。我们将尝试一下。如果有人感兴趣,我为闭包编译器编写了一个快速而肮脏的MSBuild任务。有趣的是,它使用的是.Net版本的编译器(使用IKVM),因此它在进程中运行(它还可以选择提交给托管的编译器,尽管进程中的版本显然要快得多)。我完全不懂MSBuild,但我不知道如何使那里的代码与plovr一起工作。我用什么填充$(Plovr)呢。我已经尝试了直连
,但在发布我的项目时,一直得到退出代码1。