我可以从cake-build文件中调用gulp吗?

M4N*_*M4N 2 asp.net gulp cakebuild

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

我正在尝试用Cake构建和包装解决方案。虽然使用DotNetBuild()MSBuild()任务构建解决方案都可以正常工作,但是在构建过程中不会执行gulp任务。

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

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

Pat*_*son 5

注意:此答案是 Mattias Karlsson(经他的许可)从Cake问题回复中复制的 。


只是快速浏览一下,所以我可能会丢失一些东西,但是检查csproj文件,BeforeBuildMSBuild目标似乎为空?

WebApplication1构建事件

Visual Studio 2015具有针对Gulp / Grunt的内置任务运行器,因此这可能正在发挥作用。

当前,我们没有NPM或Gulp的别名(虽然这是一个很好的插件),但是您可以做的是通过StartProcess别名自己调用Gulp 。我在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);
Run Code Online (Sandbox Code Playgroud)

假设您已全局安装了Node&Gulp(通过运行全局安装了Gulp npm install -g gulp),这又花了5分钟时间,而且又很脏,因此您需要将clean / restore / less划分为单独的Cake任务。我设置环境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
Run Code Online (Sandbox Code Playgroud)

这可能不是您要使用的解决方案,但它应该“ 起作用”。