我可以从蛋糕构建文件中调用gulp吗?

时间:2016-02-03 12:48:57

标签: asp.net gulp cakebuild

我有一个ASP.NET解决方案,我使用gulp执行一些任务(例如,编译较少)。在Visual Studio内部,相应的gulp-task绑定到BeforeBuild事件,因此每当我构建解决方案时它都会自动启动。

我正在尝试cake来构建和打包解决方案。虽然使用DotNetBuild()MSBuild()任务构建解决方案可以正常工作,但在构建期间不会执行gulp任务。

似乎gulp(可能还有其他任务运行者)不会在构建过程中自动“集成”。

蛋糕在构建过程中是否支持调用gulp? (当然,如果它不可用,它理想情况下也应该恢复gulp本身(使用npm / package.json)。)

2 个答案:

答案 0 :(得分:5)

注意:此答案是从 Cake issue response 由Mattias Karlsson(经他许可)。

只是快速查看,所以我可能会遗漏一些东西,但检查 csproj文件,BeforeBuild MSBuild目标似乎是空的?

WebApplication1 Build Events

Visual Studio 2015有一个内置的Gulp / Grunt任务运行器,所以这个 可能是什么在踢。

目前我们没有NPM或Gulp的别名(这将是一个 虽然很棒,但你可以做的就是自己调用Gulp 通过StartProcess别名。我在下面轻轻调整了build.cake

var target = Argument("target", "Default");

DirectoryPath solutionDir = MakeAbsolute(Directory("./"));
FilePath solution    = solutionDir.CombineWithFilePath("WebApplication1.sln");
DirectoryPath projectDir  = solutionDir.Combine("WebApplication1");
FilePath lessOutput  = projectDir.CombineWithFilePath("css/style.css");

Task("Default")
  .Does(() =>
{
  NuGetRestore(solution);

  if (FileExists(lessOutput))
  {
    Information("Cleaning old less output {0}", lessOutput);
    DeleteFile(lessOutput);
  }

  StartProcess("cmd", new ProcessSettings {
    Arguments = "/c \"set CI=true && npm install && gulp compile-less\"",
    WorkingDirectory = projectDir
  });

  if (!FileExists(lessOutput))
  {
    throw new Exception("Less failed to create " + lessOutput);
  }
  Information("Less created {0}", lessOutput);

  MSBuild(solution);
});

RunTarget(target);

这假设你有Node& Gulp全球安装(你安装Gulp 全局通过运行npm install -g gulp),也快5分钟 而且很脏,所以你想要将clean / restore / less划分为单独的 蛋糕任务。我设置了环境CI=true,因为有些节点模块 否则可能需要用户进行恢复。

放弃上面的MSBuild / NuGet恢复将输出如下内容:

Cleaning old less output C:/temp/cake_issue_672/WebApplication1/WebApplication1/css/style.css
[11:26:12] Using gulpfile C:\temp\cake_issue_672\WebApplication1\WebApplication1\gulpfile.js
[11:26:12] Starting 'compile-less'...
[11:26:13] Finished 'compile-less' after 29 ms
Less created C:/temp/cake_issue_672/WebApplication1/WebApplication1/css/style.css

这可能不是您工作的解决方案,但它“应该” 工作

答案 1 :(得分:2)

更新:现在有一个用于运行Gulp任务的Cake插件。你可以找到它here

至于为什么在Cake中使用MSBuild Alias没有调用BeforeBuild目标,我们不确定。我可以要求您提出问题here,以便我们进行讨论。理想情况下,可以提供演示问题的示例项目,以便我们进行调查。

尽管回答你的整体问题......

不,目前,没有Cake Alases / Addin支持将Gulp Tasks作为构建管道的一部分运行。这并不是说不能做到这一点,只是说它还没有出现在我们的雷达上。

话虽如此,鉴于您可以将任意C#编写为构建脚本的一部分,因此没有理由不能生成一个进程来调用gulp并使用必要的参数来完成工作。