VS发布Web时自动调用YUICompressor批量压缩JS、CSS

在Visual Studio中通过修改发布配置文件,可以在发布Web时自动调用YUICompressor批量压缩项目中JS和CSS。这种方式的优点,一是不需要在项目的js、css文件夹中单独建立debug子文件夹来存放未经压缩的文件,二是使用debug模式发布时不会进行压缩方便调试。具体方法如下:

1 安装JRE,下载YUICompressor,并解压(如:E:\工具\yuicompressor)

2 新建Compressor.bat文件内容为:

@echo off
if "%1" == "" goto exit
pushd "%1"
echo 正在压缩Css文件
for /r %%i in (*.css) do call "java.exe" -jar E:\工具\yuicompressor\yuicompressor.jar -o %%i %%i
echo 正在压缩js文件
for /r %%i in (*.js) do call "java.exe" -jar E:\工具\yuicompressor\yuicompressor.jar -o %%i %%i
:exit
exit


3 修改项目的发布配置文件, 项目的发布配置文件名为 <profilename>.pubxml,位于项目文件夹下的properties\PublishProfiles文件夹

增加下面的内容:

<Target Name="YUICompressor" AfterTargets="CopyAllFilesToSingleFolderForPackage" Condition="'$(ConfigurationName)'=='Release'">
<Message Text="调用YUICompressor压缩CSS、JS" Importance="high" />
<Exec Command="call E:\工具\Compressor.bat $(ProjectDir)obj\$(ConfigurationName)\Package\" />
</Target>

注: E:\工具\Compressor.bat路径根据需要替换。

完成上面的工作后在“解决方案资源管理器”中右击要发布的项目点击“发布”后就可以在项目发布文件夹中看到已经压缩过的CSS、JS了

 

2013.3.17更新:

VS2010中没有pubxml文件,可以在项目的根目录下创建一个{ProjectName}.wpp.targets文件,如果你的项目文件名是WebFromApplication.csproj那么就是WebFromApplication.wapp.targets。它是一个MSBuild 构建文件(pubxml文件也是一个MSBuild构建文件),我们可以使用它来扩展Visual Studio生成/发布过程。

内容如下:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/MsBuild/2003">
<PropertyGroup>
<YUICompressor>E:\工具\yuicompressor\yuicompressor.jar</YUICompressor>
</PropertyGroup>
<ItemGroup>
<JavaScriptFiles Include="$(ProjectDir)$(_PackageTempDir)\**\*.js"/>
</ItemGroup>
<Target Name="Compressor" AfterTargets="CopyAllFilesToSingleFolderForPackage" >
<Message Importance="high" Text="YUICompressor JavaScriptFiles" ></Message>
<Exec Command="java.exe -jar $(YUICompressor) -o %(JavaScriptFiles.Identity) %(JavaScriptFiles.Identity)" />
</Target>
</Project>

说明:

1 在这个MSBUILD构建文件中使用<ItemGroup>元素来选取需要压缩的文件集合,来代替上例中的bat文件。在后面的Exec任务使用%(JavaScriptFiles.Identity)来表示选取集合中当前执行压缩的单个文件。其中$(ProjectDir)和$(_PackageTempDir)是MSBuild预定义的属性,分别表示项目根目录位置和相对项目根目录的临时打包文件的位置。

2 使用<PropertyGroup>元素来定义yuicompressor.jar文件的位置,在后面Exec 任务中使用$(YUICompressor)来获取值。

 

 

 

 

posted @ 2013-03-06 18:12  rentj  阅读(4818)  评论(4编辑  收藏  举报