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






4.50/5 (2投票s)
使用 Microsoft Ajax Minifier 自动压缩嵌入式 JavaScript 资源。
最近,微软宣布了 ASP.NET 开发者工具箱的另一个实用工具:Microsoft Ajax Minifier,该工具使您可以通过删除不必要的内容来减小 JavaScript 文件的大小。 显然,这是一个非常有用的工具,并且 ASP.NET 开发社区非常乐意接受它(只需在 Google 上搜索一下即可看到许多积极的响应)。 该工具确实效果很好,甚至有一些文章将其与其他著名的 JavaScript 压缩工具进行比较,从而证明了其质量。 因此,毫无疑问是否要使用 Minifier。
但是,问题是如何使用它。 Microsoft Ajax Minifier 软件包确实包含一组文档,这些文档解释了如何使用该工具,甚至讨论了几个使用场景。 不幸的是,文档中未涵盖我想要使用 Minifier 的方式,并且出于某种原因,我也未在 Internet 上找到有用的信息,因此我决定进行一些研究并与社区分享我的发现。
那么,我希望如何使用 Minifier?
以下是要求
- 我希望在 Web 应用程序解决方案的任何项目中自动压缩嵌入式 JavaScript 资源。
- 我希望压缩后的 JavaScript 具有原始名称,这样我就不必更改 HTML 标记中的引用。
- 我希望仅在 Visual Studio 中切换到 Release 模式时才进行压缩。 当我处于 Debug 模式时,我希望所有 JavaScript 文件都未压缩,以便于调试。
- 我希望压缩后的 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 一起使用,因为它不能正确地与其一起使用。