Можно ли вызвать gulp из файла сборки тортов?

У меня есть решение ASP.NET, где я выполняю некоторые задачи, используя gulp (например, less-compilation). Внутри Visual Studio соответствующая gulp-задача связана с событием BeforeBuild, поэтому она запускается автоматически всякий раз, когда я строю решение.

Я экспериментировал с тортом для создания и упаковки раствора. При построении решения работает нормально, используя либо DotNetBuild() или же MSBuild() Задачи, задачи Gulp не выполняются во время сборки.

Кажется, что gulp (и, возможно, также другие исполнители задач) автоматически не "интегрируются" в процесс сборки.

Торт как-то поддерживает вызов глотка во время сборки?
(Конечно, в идеале он также должен восстановить сам gulp (используя npm / package.json), если он недоступен.)

2 ответа

Решение

ОБНОВЛЕНИЕ: теперь есть дополнение для Cake для запуска Gulp Tasks. Вы можете найти это здесь

Относительно того, почему использование псевдонима MSBuild в Cake не вызывает цель BeforeBuild, мы не уверены. Могу ли я попросить вас поднять вопрос здесь, чтобы мы могли обсудить его? В идеале может быть предоставлен пример проекта, который демонстрирует проблему, чтобы мы могли провести расследование.

Чтобы ответить на ваш общий вопрос, хотя...

Нет, в настоящее время нет Cake Aliases/Addin's, которые поддерживают запуск заданий Gulp как части конвейера сборки. Это не значит, что этого нельзя было сделать, просто это еще не было на нашем радаре.

Тем не менее, учитывая, что вы можете написать любой произвольный C# как часть вашего скрипта сборки, нет никаких причин, по которым вы не могли бы вызвать процесс, чтобы вызвать gulp с необходимыми аргументами для выполнения работы.

Примечание. Этот ответ был скопирован с ответа Маттиаса Карлссона на вопрос о Cake (с его разрешения).


Просто сделал быстрый просмотр, чтобы я мог что-то упустить, но, проверяя файл csproj, BeforeBuild Цель MSBuild кажется пустой?

События сборки WebApplication1

В 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 минут быстро и грязно, так что вы хотели бы разделить очистить / восстановить / меньше на отдельные задачи для тортов. Я установил среду 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

Возможно, это не то решение, над которым вы работали, но оно "должно" работать.

Другие вопросы по тегам