如何使用 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 installinit 命令执行 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 插件现已创建,可从此处下载:

https://www.nuget.org/packages/Cake.Bower/