如何使用 Cake (http://cakebuild.net) 安装 bower 包
How do I install bower packages using Cake (http://cakebuild.net)
我正在努力将 Powershell 构建脚本迁移到 Cake 脚本,之前我会 运行 在找到 bower.json 文件的目录集合中有以下内容:
foreach ($directory in (Get-CommonPath $bowerDirs)) {
Push-Location $directory
&bower install
Pop-Location
}
但是由于 bower 似乎没有蛋糕别名,所以我正在努力弄清楚我应该如何使用 Cake 来做到这一点 (&bower install
)。
更新
根据@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}");
}
}
});
但是对于每个尝试的路径都给出了以下错误消息
Failed on C:/Projects/dev/WebUI, The system cannot find
the file specified
如果运行ning bower安装在目录下使用命令提示符就可以运行s成功
运行所在的目录结构如下所述。
单个 git 分支中有多个解决方案。每个解决方案可以包含多个项目,有些有一个 bower.json 文件。 GetBowerRoots() 方法 returns 包含 bower.json 文件的目录的 DirectoryPathCollection。
c:\
- Projects
- Branch
- build.ps1
- build.cake
- Sol1
- Proj1
- Misc proj files
- bower.json
- Sol2
- Proj2
- Misc proj files
- bower.json
你是对的,目前 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
来自命令 window。这将输出凉亭所在的所有位置。所以最终的代码看起来像下面这样,我已经测试过它并且可以工作:
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));
}
}
一个 Cake.Bower 插件现已创建,可从此处下载:
我正在努力将 Powershell 构建脚本迁移到 Cake 脚本,之前我会 运行 在找到 bower.json 文件的目录集合中有以下内容:
foreach ($directory in (Get-CommonPath $bowerDirs)) {
Push-Location $directory
&bower install
Pop-Location
}
但是由于 bower 似乎没有蛋糕别名,所以我正在努力弄清楚我应该如何使用 Cake 来做到这一点 (&bower install
)。
更新 根据@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}");
}
}
});
但是对于每个尝试的路径都给出了以下错误消息
Failed on C:/Projects/dev/WebUI, The system cannot find the file specified
如果运行ning bower安装在目录下使用命令提示符就可以运行s成功
运行所在的目录结构如下所述。 单个 git 分支中有多个解决方案。每个解决方案可以包含多个项目,有些有一个 bower.json 文件。 GetBowerRoots() 方法 returns 包含 bower.json 文件的目录的 DirectoryPathCollection。
c:\
- Projects
- Branch
- build.ps1
- build.cake
- Sol1
- Proj1
- Misc proj files
- bower.json
- Sol2
- Proj2
- Misc proj files
- bower.json
你是对的,目前 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
来自命令 window。这将输出凉亭所在的所有位置。所以最终的代码看起来像下面这样,我已经测试过它并且可以工作:
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));
}
}
一个 Cake.Bower 插件现已创建,可从此处下载: