如何控制spawnCommand方法在哪里执行

我怎样才能理解和控制从spawnCommand运行?

我正在创build一个哟发生器,作为过程的一部分,我需要调用一个外部工具。 我想这样做的方法是通过从spawnCommand调用powershell脚本。 我遇到了spawnCommand在path中有空格的问题,所以我只是将其封装在powershell文件中。 我看到一些关于superspawn的东西,但是无法运行。

无论如何,我的主要问题是,我正在尝试调用powershell,并将其脚本文件作为参数,但它找不到脚本文件。 这里是代码:

signatureKeyFile: function() { var done = this.async(); this.spawnCommand('powershell', ['sign.ps1'], { cwd: this.destinationPath('.') }).on('close', done); 

},

我尝试使用procmon来查看它执行的目录,并更好地理解它。 看起来它在很多地方尝试,但似乎所有的环境path。 它不会尝试yo生成器的源或目标path,或者至less这是我看来的。

所以我的问题是1)哪个工作目录spawnCommand默认运行? 2)我怎样才能控制,所以它可以find这个PowerShell文件? spawnCommand不会让我在path中使用空格,所以我不能给它一个完整的path,所以在我看来。

非常感谢!

spawnCommand不会让我在path中使用空格,所以我不能给它一个完整的path,所以在我看来。

这通常是一个众所周知的命令行问题。 参数之间用空格分隔,所以它只是假设你的path实际上是多个参数。

我不是100%的窗口,但在OSx上,您将空间保留为some\ path\ with\ spaces

另一种select是将参数作为string传递。 如果你用双引号包装你的path呢?

this.spawnCommand('powershell', ['"/home/My Home/sign.ps1"']);

FWIW,Yeoman spawnCommand只是Node spawn命令的一个包装,在这里我们帮助规范化一个命令,这样它就可以在Windows上正常运行。 看到

它会帮助你testing正确的语法来传递path,如果你可以减less问题的范围只有Node spawn命令。

[编辑修复断开的链接]

我们可以通过设置当前的工作目录或者cwd来解决这个问题:

  this.spawnCommandSync('sn.exe', ['-k', format("{0}\\{1}.snk", this.destinationPath('.'), this.props.myItemName)], { cwd: 'C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v10.0A\\bin\\NETFX 4.6 Tools' });