如何使用Cake安装bower包(http://cakebuild.net)

时间:2017-08-14 15:39:42

标签: c# powershell build bower cakebuild

我正在将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

2 个答案:

答案 0 :(得分:3)

现在已经创建了Cake.Bower Addin,可从此处下载:

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

答案 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));
  }
}