65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Microsoft Ajax Minifier 自动压缩嵌入式 JavaScript 资源

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (2投票s)

2010年5月14日

CPOL

3分钟阅读

viewsIcon

43762

使用 Microsoft Ajax Minifier 自动压缩嵌入式 JavaScript 资源。

最近,微软宣布了 ASP.NET 开发者工具箱的另一个实用工具:Microsoft Ajax Minifier,该工具使您可以通过删除不必要的内容来减小 JavaScript 文件的大小。 显然,这是一个非常有用的工具,并且 ASP.NET 开发社区非常乐意接受它(只需在 Google 上搜索一下即可看到许多积极的响应)。 该工具确实效果很好,甚至有一些文章将其与其他著名的 JavaScript 压缩工具进行比较,从而证明了其质量。 因此,毫无疑问是否要使用 Minifier。

但是,问题是如何使用它。 Microsoft Ajax Minifier 软件包确实包含一组文档,这些文档解释了如何使用该工具,甚至讨论了几个使用场景。 不幸的是,文档中未涵盖我想要使用 Minifier 的方式,并且出于某种原因,我也未在 Internet 上找到有用的信息,因此我决定进行一些研究并与社区分享我的发现。

那么,我希望如何使用 Minifier?

以下是要求

  1. 我希望在 Web 应用程序解决方案的任何项目中自动压缩嵌入式 JavaScript 资源。
  2. 我希望压缩后的 JavaScript 具有原始名称,这样我就不必更改 HTML 标记中的引用。
  3. 我希望仅在 Visual Studio 中切换到 Release 模式时才进行压缩。 当我处于 Debug 模式时,我希望所有 JavaScript 文件都未压缩,以便于调试。
  4. 我希望压缩后的 JavaScript 文件永远不会覆盖原始 JavaScript 文件,并且我不希望保留压缩后的 JavaScript,因此无论何时修改我的 JavaScript 代码,压缩后的资源始终是最新的。

我相信以上要求描述了最常见的 Web 应用程序解决方案配置之一,因此,如果有一种方法可以实现它们,那将非常有用。

我可以使用 Microsoft Ajax Minifier 实现以上要求吗?

答案是肯定的。 该解决方案有点明显:由于 Microsoft Ajax Minifier 包含一个 MSBuild 任务,因此我只需要修改一个项目文件,其中包含我需要压缩的嵌入式 JavaScript 资源,以包含 Microsoft Ajax Minifier 构建任务。 这听起来并不复杂,下面是解决方案,它确实很简单。 只需在项目文件中,紧挨着结束的</Project>标签之前(在大多数情况下)包含以下 XML 即可。

<!-- Minify all JavaScript files that were embedded as resources -->
<Import Project="$(MSBuildExtensionsPath)\Microsoft\MicrosoftAjax\ajaxmin.tasks" />
<PropertyGroup>
<ResGenDependsOn>
MinifyJavaScript;
$(ResGenDependsOn)
</ResGenDependsOn>
</PropertyGroup>
<Target Name="MinifyJavaScript" 
Condition=" '$(ConfigurationName)'=='Release' ">
<Copy SourceFiles="@(EmbeddedResource)" DestinationFolder="$(IntermediateOutputPath)" 
Condition="'%(Extension)'=='.js'">
<Output TaskParameter="DestinationFiles" 
ItemName="EmbeddedJavaScriptResource" />
</Copy>
<AjaxMin SourceFiles="@(EmbeddedJavaScriptResource)" SourceExtensionPattern="\.js$" 
TargetExtension=".js" />
<ItemGroup>
<EmbeddedResource Remove="@(EmbeddedResource)" 
Condition="'%(Extension)'=='.js'" />
<EmbeddedResource Include="@(EmbeddedJavaScriptResource)" />
<FileWrites Include="@(EmbeddedJavaScriptResource)" />
</ItemGroup>
</Target>

此脚本的作用是,当解决方案配置为“Release”时,它会找到所有扩展名为“.js”的项目嵌入式资源文件,并在中间输出文件夹中创建具有相同名称的压缩版本,构建过程稍后会从此处选取它们。

一些提示

您可能已经注意到,Microsoft Ajax Minifier MSBuild 任务是从安装程序复制到的默认文件夹引用的。 如果要从其他位置引用它,例如,如果您有一个共享的开发环境,并且希望每个人都具有相似的设置,只需将两个文件 *ajaxmin.dll* 和 *ajaxmintask.dll* 复制到另一个位置,并在上面的脚本中包含 <UsingTask> 标记(如下)而不是 <Import> 标记

<UsingTask TaskName="AjaxMin" 
AssemblyFile="$(MSBuildProjectDirectory)\..\Build\AjaxMinTask.dll" />

提供的脚本执行所谓的 JavaScript 代码的“正常压缩”(请参阅 Ajax Minifier 文档),该压缩已经做得很好了,在大多数情况下都足够好:压缩率超过 50%。 如果要启用“Hypercrunching”模式(请参阅 Ajax Minifier 文档),则只需修改脚本的一行,以包含 Ajax Minifier 的“LocalRenaming”选项。

<AjaxMin SourceFiles="@(EmbeddedJavaScriptResource)" SourceExtensionPattern="\.js$" 
 TargetExtension=".js" LocalRenaming="CrunchAll" />

最后一点是:不要将默认的Hypercrunching模式或RemoveUnneededCode选项与 ASP.NET AJAX Framework 一起使用,因为它不能正确地与其一起使用。

© . All rights reserved.