我正在研究将 javascript 文件缩小为 CI 流程一部分的方法,以便我们可以在开发中使用未缩小的文件,并在部署到登台和实时服务器时自动压缩它们。
这是针对 ASP.NET 站点的;我们使用 Hudson 作为构建服务器。
我对 Google Closure 编译器很感兴趣,并且遇到过这个.Net MSBuild Google Closure Compiler Task,但它似乎并没有被广泛使用。是否有更好的选择与 MSBuild 一起使用,使用 Closure 或替代缩小工具?
我正在研究将 javascript 文件缩小为 CI 流程一部分的方法,以便我们可以在开发中使用未缩小的文件,并在部署到登台和实时服务器时自动压缩它们。
这是针对 ASP.NET 站点的;我们使用 Hudson 作为构建服务器。
我对 Google Closure 编译器很感兴趣,并且遇到过这个.Net MSBuild Google Closure Compiler Task,但它似乎并没有被广泛使用。是否有更好的选择与 MSBuild 一起使用,使用 Closure 或替代缩小工具?
我们在一个基于 .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 还支持其他一些很酷的功能,例如尺寸报告和模块图,但即使没有这些,我们也对我们当前的设置非常非常满意。
SquishIt Details是一个运行时压缩 器,但做得很好。
最明显的选择是YUI Compressor,它稳定可靠。
它有一个 .Net 端口:Yahoo!UI 库:用于 .Net 的 YUI Compressor 附带一个 mbsbuild 任务。
此外,使用原始(Java)同样容易使用Exec
任务,唯一的缺点是它具有 java 依赖性。
您应该会看到我在Using Microsoft AJAX Minifier with Visual Studio 2010 1-click publish中回答的一个非常相似的问题。您应该能够使用那里的详细信息来解决您的问题。