我如何理解和控制spawnCommand的运行位置?
我正在创建一个 yo 生成器,作为该过程的一部分,我需要调用外部工具。我尝试执行此操作的方法是从spawnCommand 调用powershell 脚本。我在使用spawnCommand时遇到了路径中含有空格的问题,所以我只是将其封装在powershell文件中。我看到了一些有关 superspawn 的内容,但无法让它发挥作用。
无论如何,我的主要问题是我试图调用 powershell 并将脚本文件作为参数提供给它,但它找不到脚本文件。这是代码:
signatureKeyFile: function() {
var done = this.async();
this.spawnCommand('powershell', ['sign.ps1'], {
cwd: this.destinationPath('.')
}).on('close', done);
},
我尝试使用 procmon 来查看它从哪个目录执行并更好地理解它。看起来它在很多地方都尝试过,但似乎都是环境路径。它不会尝试 yo 生成器的源路径或目标路径,或者至少在我看来是这样。
所以我的问题是 1)spawnCommand默认从哪个工作目录运行? 2)我如何控制它以便它可以找到这个powershell文件? spawnCommand 不允许我在路径中使用空格,因此我无法为其提供完整路径,或者在我看来是这样。
非常感谢!
最佳答案
spawnCommand won't let me use spaces in paths, so I can't feed it a full path or so it seems to me.
这通常是众所周知的命令行问题。参数由空格分隔,因此它只是假设您的路径实际上是多个参数。
我不是 100% 支持 Windows,但在 OSx 上,您可以将空格分隔为 some\path\with\space
。
另一个选项是将参数作为字符串传递。如果您要将路径用双引号括起来怎么办?
this.spawnCommand('powershell', ['"/home/My Home/sign.ps1"']);
FWIW,Yeoman spawnCommand
只是 Node spawn 命令的包装器,我们帮助规范化命令,以便它在 Windows 上运行良好。参见
- https://github.com/yeoman/generator/blob/master/lib/actions/spawn-command.js#L20
- https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
如果您可以将问题范围缩小到仅使用 Node 生成命令,它将帮助您测试传递路径的正确语法。
[已编辑以修复损坏的链接]
关于node.js - 如何控制spawnCommand方法的执行位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34580068/