在发布配置文件中使用uglifyjs

时间:2014-08-01 20:56:08

标签: msbuild uglifyjs

这是我发布个人资料的摘要:

<Exec WorkingDirectory="$(_PackageTempDir)"
      Command="uglifyjs ..\..\..\..\js\file1.js ..\..\..\..\js\file2.js --mangle --reserved &quot;$&quot; --compress &gt; js\outfile.min.js" />

某些文件(例如file1.js)位于我的项目之外,因此不会复制到_PackageTempDir。在这里,我必须......达到几个级别才能到达那里。我想知道是否有一种很好的方法可以使用ItemGroup或完整路径来获得相同的结果。

以上代码“有效”。这很复杂,难以维护。寻找更好的解决方案。

编辑:

根据Sayed的建议,我将自己的个人资料改进为:

<ItemGroup>
    <UglifyJSFiles Include="$(MSBuildThisFileDirectory)..\..\js\mcm\mcm.js" />
    <UglifyJSFiles Include="$(_PackageTempDir)\js\main.js" />
</ItemGroup>

<Exec WorkingDirectory="$(_PackageTempDir)"
      Command="uglifyjs @(UglifyJSFiles,' ') &gt; js\app.min.js" />

但我遇到了一个问题,因为路径包含空格。如何引用路径字符串或转义空格?

1 个答案:

答案 0 :(得分:0)

以下是一个展示更好方法的示例

  <PropertyGroup>
    <JsFilesToUglifyRoot Condition=" '$(JsFilesToUglifyRoot)'=='' ">$(MSBuildThisFileDirectory)\..\..\..\..\js\</JsFilesToUglifyRoot>
  </PropertyGroup>

  <ItemGroup>
    <JsFilesToUglify Include="$(JsFilesToUglifyRoot)**\*.js" />
  </ItemGroup>

  <Target Name="AfterBuild">
      <Message Text="Files: [@(JsFilesToUglify,' ')]" Importance="high" />
      <!-- If you need to quote the file paths use the transform below -->
      <Message Text="Files: [@(JsFilesToUglify->'&quot;%(FullPath)&quot;',' ')]" Importance="high" />
  </Target>

在这里,我定义了一个新属性JsFilesToUglify,其中填充了您在上面指出的路径。请注意MSBuildThisFileDirectory保留属性的用法。你不应该只依赖..\,因为它的VS在VS之外的值可能不同。另外,请勿使用MSBuildProjectDirectory属性,仅使用MSBuildThisFileDirectory

然后在目标内部我使用@(JsFilesToUglify,' ')变换文件列表,' '使空格成为值之间的分隔符,就像上面的命令一样。