我可以从 cake-build 文件中调用 gulp 吗?
Can I invoke gulp from a cake-build file?
我有一个 ASP.NET 解决方案,我使用 gulp 执行一些任务(例如 less-compilation)。在 Visual Studio 中,相应的 gulp-task 绑定到 BeforeBuild 事件,因此每当我构建解决方案时它都会自动启动。
我正在试验 cake 来构建和打包解决方案。虽然使用 DotNetBuild()
或 MSBuild()
任务可以很好地构建解决方案,但 gulp 任务不会在构建期间执行。
似乎 gulp(可能还有其他任务运行程序)在构建过程中不会自动 "integrated"。
cake 是否支持在构建过程中调用 gulp?
(当然,如果 gulp 不可用,理想情况下它也应该恢复自身(使用 npm / package.json)。)
更新: 现在有一个用于 运行 Gulp 任务的 Cake 插件。你可以找到它here
至于为什么在 Cake 中使用 MSBuild 别名没有调用 BeforeBuild 目标,我们不确定。能否请您提出一个问题 here 以便我们讨论。理想情况下,可以提供一个演示问题的示例项目,以便我们进行调查。
虽然要回答你的总体问题...
不,目前没有 Cake Aliases/Addin 支持 运行 Gulp 任务作为构建管道的一部分。这并不是说这不能完成,只是我们还没有注意到它。
话虽如此,鉴于您可以编写任意 C# 作为构建脚本的一部分,您没有理由不能生成一个进程来调用 gulp 并提供必要的参数作品。
注:此答案复制自
Cake issue response
作者:Mattias Karlsson(经他许可)。
只是快速浏览了一下,所以我可能遗漏了一些东西,但请检查
csproj 文件,BeforeBuild
MSBuild 目标似乎是空的?
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
这可能不是您想要的解决方案,但它 "should"
工作。
我有一个 ASP.NET 解决方案,我使用 gulp 执行一些任务(例如 less-compilation)。在 Visual Studio 中,相应的 gulp-task 绑定到 BeforeBuild 事件,因此每当我构建解决方案时它都会自动启动。
我正在试验 cake 来构建和打包解决方案。虽然使用 DotNetBuild()
或 MSBuild()
任务可以很好地构建解决方案,但 gulp 任务不会在构建期间执行。
似乎 gulp(可能还有其他任务运行程序)在构建过程中不会自动 "integrated"。
cake 是否支持在构建过程中调用 gulp?
(当然,如果 gulp 不可用,理想情况下它也应该恢复自身(使用 npm / package.json)。)
更新: 现在有一个用于 运行 Gulp 任务的 Cake 插件。你可以找到它here
至于为什么在 Cake 中使用 MSBuild 别名没有调用 BeforeBuild 目标,我们不确定。能否请您提出一个问题 here 以便我们讨论。理想情况下,可以提供一个演示问题的示例项目,以便我们进行调查。
虽然要回答你的总体问题...
不,目前没有 Cake Aliases/Addin 支持 运行 Gulp 任务作为构建管道的一部分。这并不是说这不能完成,只是我们还没有注意到它。
话虽如此,鉴于您可以编写任意 C# 作为构建脚本的一部分,您没有理由不能生成一个进程来调用 gulp 并提供必要的参数作品。
注:此答案复制自 Cake issue response 作者:Mattias Karlsson(经他许可)。
只是快速浏览了一下,所以我可能遗漏了一些东西,但请检查
csproj 文件,BeforeBuild
MSBuild 目标似乎是空的?
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
这可能不是您想要的解决方案,但它 "should" 工作。