node.js - 如何控制spawnCommand方法的执行位置

标签 node.js yeoman yeoman-generator

我如何理解和控制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 上运行良好。参见

如果您可以将问题范围缩小到仅使用 Node 生成命令,它将帮助您测试传递路径的正确语法。

[已编辑以修复损坏的链接]

关于node.js - 如何控制spawnCommand方法的执行位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34580068/

相关文章:

javascript - Electron.js无法通过jspdf保存pdf文件

node.js - yeoman 如何设置标题(.htaccess?)

javascript - 如何为自定义 yeoman 生成器文件设置目标路径?

css - Yeoman 教程缺少样式

sharepoint - 命令失败 : wmic os get Caption

ajax - 保持数据与服务器同步

node.js - Linux 上的递归 Node.js fs.watch

git - 使用 node.js npm 和 git 的最佳工作流

php - 使用 PHP 和 Grunt 开发单页应用程序的工作流程

json - 将 yo-rc.json 文件移动到根文件夹