2016-01-03 4 views
1

Как я могу понять и контролировать, откуда запускается spawnCommand?как контролировать, где выполняется метод spawnCommand

Я создаю генератор yo и, как часть процесса, мне нужно вызвать внешний инструмент. То, как я это делаю, - это вызвать скрипт powershell из spawnCommand. У меня возникли проблемы с spawnCommand с пробелами в путях, поэтому я просто инкапсулировал это в файл powershell. Я видел что-то о супершаге, но не мог заставить его работать.

В любом случае, моя основная проблема заключается в том, что я пытаюсь вызвать powershell и дать ему файл сценария в качестве аргумента, но он не может найти файл сценария. Вот код:

signatureKeyFile: function() { 
    var done = this.async(); 

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

},

Я попытался с помощью ProcMon, чтобы увидеть, в каком каталоге он выполняет от и лучше понять его. Похоже, он пробует это в тоннах мест, но, по-видимому, все пути среды. Он не пытается использовать исходный или целевой путь для генератора yo, или, по крайней мере, так оно и было.

Итак, мои вопросы: 1) какая рабочая директория запускаетСистему запуска по умолчанию? 2) Как я могу это сделать, чтобы найти этот файл powershell? spawnCommand не позволит мне использовать пробелы в путях, поэтому я не могу прокормить его полным путем или, как мне кажется.

Большое спасибо!

ответ

3

spawnCommand не позволит мне использовать пробелы в дорожках, поэтому я не могу прокормить его полным путем или так, как мне кажется.

Это, как правило, хорошо известные проблемы командной строки. Аргументы разделены пробелами, поэтому просто предположим, что ваш путь на самом деле является многократным аргументом.

Я не 100% для окон, но на OSx вы можете использовать пробелы как some\ path\ with\ spaces.

Другие варианты - передавать аргументы в виде строк. Что делать, если вы должны поместить свой путь в двойные кавычки?

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

FWIW, Yeoman spawnCommand является просто оболочкой для узла команды икры, где мы помогаем нормализовать команду, так что будет работать нормально на окнах. См

Это поможет вам проверить правильный синтаксис, чтобы пройти путь, если вы можете уменьшить объем вашей проблемы только команды Node мицелия.

[Отредактировано исправить неработающей ссылке]

+0

Спасибо за вашу помощь! Мы смогли найти решение, которое работает для нас. Мы никогда не получали двойные кавычки, чтобы сотрудничать. –

0

Нам удалось решить путем установки текущего рабочего каталога или УХО с пробелами:

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' 
    });