使用YUI压缩器.NET压缩子文件夹中的所有JS文件

时间:2015-10-03 10:56:27

标签: .net msbuild compression yui-compressor

在我的项目内" Scripts"文件夹我有很多子目录。我想用输出缩小每个js文件,将其命名为" adjacent-subdirectory / file_name.min.js" 。为此我在BundleConfig.xml文件中使用下面的代码:

<Target Name="Minify"> 
   <CreateItem Include="$(MSBuildProjectDirectory)\Scripts\*\*.js;">
      <Output TaskParameter="Include" ItemName="JsFiles"/>
   </CreateItem>

   <JavaScriptCompressorTask
    SourceFiles="@(JsFiles)"
    DeleteSourceFiles="false"
    OutputFile="$(MSBuildProjectDirectory)\Scripts\*\%(JsFiles.Filename).min.js"
    CompressionType="Standard"
    LoggingType="Info"
    LineBreakPosition="-1"
   />
</Target>

当我放置&#34; * \&#34;在我的OutputFile标记中,我遇到了构建错误。那么有人可以指导我如何实现这一点(每个缩小的文件应该只放在相应的子目录中)

1 个答案:

答案 0 :(得分:1)

首先单独压缩每个文件(不合并它们),您需要使用%而不是SourceFiles中的@批量处理JavascriptCompresor任务。

其次,您可以在include路径中使用**,并在JavascriptCompressor任务中使用%(RecursiveDir)替换它。

我目前无法测试,但我认为以下内容应该有效:

<Target Name="Minify"> 
   <CreateItem Include="$(MSBuildProjectDirectory)\Scripts\**\*.js;">
      <Output TaskParameter="Include" ItemName="JsFiles"/>
   </CreateItem>

   <JavaScriptCompressorTask
    SourceFiles="@(JsFiles)"
    DeleteSourceFiles="false"
    OutputFile="$(MSBuildProjectDirectory)\Scripts\%(JsFiles.RecursiveDir)\%(JsFiles.Filename).min.js"
    CompressionType="Standard"
    LoggingType="Info"
    LineBreakPosition="-1"
   />
</Target>

有关RecursiveDir的更多信息,您可以阅读以下文章:https://msdn.microsoft.com/en-us/library/ms164313.aspx

相关问题