我正在将Powershell构建脚本迁移到Cake脚本,之前我会在找到bower.json文件的目录集合上运行以下代码:
foreach ($directory in (Get-CommonPath $bowerDirs)) {
Push-Location $directory
&bower install
Pop-Location
}
但是因为对于凉亭来说似乎不是一个蛋糕别名,所以我很难弄清楚如何使用Cake来做到这一点(&bower install
)。
UPDATE 根据@ garyewanpark的回答,我尝试了以下
Task("BowerInstall")
.Does(() => {
var bowerRoots = GetBowerRoots();
foreach (var bowerRoot in bowerRoots.Select(x => x.FullPath))
{
try
{
var exitCodeWithArgument = StartProcess("bower", new ProcessSettings {
Arguments = "install",
WorkingDirectory = bowerRoot
});
Information("Exit code: {0}", exitCodeWithArgument);
}
catch (Exception ex)
{
Information($"Failed on {bowerRoot}, {ex.Message}");
}
}
});
但是这为每个尝试的路径提供了以下错误消息
C:/ Projects / dev / WebUI失败,系统无法找到 指定的文件
如果使用命令提示符在目录中运行bower install,则它会成功运行
下面介绍了运行它的目录结构。 单个git分支中有多个解决方案。每个解决方案都可以包含多个项目,有些还有bower.json文件。 GetBowerRoots()方法返回包含bower.json文件的目录的DirectoryPathCollection。
c:\
- Projects
- Branch
- build.ps1
- build.cake
- Sol1
- Proj1
- Misc proj files
- bower.json
- Sol2
- Proj2
- Misc proj files
- bower.json
答案 0 :(得分:3)
现在已经创建了Cake.Bower Addin,可从此处下载:
答案 1 :(得分:1)
你是对的,目前在Cake中没有Bower的插件。虽然你可以做一些事情。
首先,将为此任务创建一个插件。 Jamie Philips有一个关于如何开始这样做的博客系列,这可以在我们的资源部分here中找到。
第二个选项是使用Cake.Npm插件。在我的package.json文件中,我通常使install
命令执行bower install
,而init
命令执行npm install
。这样可以同时执行npm和bower安装,同时在Cake.Npm插件中只发出一个命令。
最后一个,我认为现在对你有意义的是使用一个过程别名,记录here。例如,您应该可以执行以下操作:
var exitCodeWithArgument = StartProcess("bower", new ProcessSettings {
Arguments = "install",
WorkingDirectory = <path to folder>
});
// This should output 0 as valid arguments supplied
Information("Exit code: {0}", exitCodeWithArgument);
注意:为了让它发挥作用,我必须完全宣布凉亭生活的路径,我不希望这样做。要找出计算机上的位置,请运行命令:
&where.exe bower
从PowerShell提示符,或简单地:
where bower
从命令窗口。这将输出bower所在的所有位置。所以最终的代码如下所示,我已经测试过并且它可以工作:
foreach (var bowerRoot in bowerRoots.Select(x => x.FullPath))
{
try
{
var exitCodeWithArgument = StartProcess("C:/Users/gary.park/AppData/Roaming/npm/bower.cmd", new ProcessSettings {
Arguments = "install",
WorkingDirectory = bowerRoot
});
Information("Exit code: {0}", exitCodeWithArgument);
}
catch (Exception ex)
{
Information(string.Format("Failed on {0}, {1}", bowerRoot, ex.Message));
}
}