2013-07-15 4 views
1

Этот код работает на Windows, и на Mac OS X:GitHub SSH-ключ не найден с Node.js child_process.spawn() на окнах, но видно на child_process.exec()

var exec = require('child_process').exec 
exec('git clone [email protected]:user/myrepo.git') 

Но этот код возвращает «Доступ запрещен (ОткрытыйКлюч)» ошибка из мерзавца при работе на Windows, но не на Mac OS X:

var spawn = require('child_process').spawn 
, child = spawn('git', [ 'clone', '[email protected]:user/myrepo.git' ], { env: process.env }) 

child.on.stderr('data', function(data) { 
    console.log(data.toString()) 
}) 

Я предполагаю, что в spawn я схожу подключение к ~/.ssh ... но я думал, посылая в process.env будет работать. Кстати, команды git clone отлично работают в Windows при вводе в командной строке напрямую.

Все, что явно не так?

ответ

0

Я предполагаю, что переменные окружения теряется в классическом node.js spaw() функции, особенно HOME (который не определен по умолчанию в окнах, и необходимо для SSH, чтобы найти свои ключи)

Может икра как win-spawn будет работать лучше:

Spawn для node.js но в пути, который работает независимо от того, какую операционную систему вы используете. Используйте это, если вы хотите использовать spawn с файлом JavaScript.

Он работает путем явного вызова узла в окнах.
Он также поддерживает регулировку окружающей среды на attempting to parse the command with a regex.
Поскольку все модификации завернуты в if (os === 'Windows_NT'), его можно безопасно использовать на системах без окон и ничего не сломать.

+0

win-spawn кажется странным взломом, учитывая, что окна являются поддерживаемой целью для узла - spawn() должны работать. делая больше исследований. –

1

Не проблема с узлом, но проблема git. Обновлен git на Windows с 1.7.11 до 1.8.3, и икру работает.

+0

Полезно знать. Баш, упакованный в msysgit, должен быть изменен. +1 – VonC

Смежные вопросы