Подтвердить что ты не робот

Как выполнить в NodeJS использование пользовательской среды?

Я пытаюсь выполнить команду в Node:

cd "/www/foo/" && "/path/to/git/bin/git.exe" config --list --global

В принципе, я хочу выполнить команду Git, которая возвращает глобальную конфигурацию (для текущего пользователя).

Это отлично работает для меня, когда я выполняю команду непосредственно на cli. Он также работает, если я делаю это в Node:

var exec = require('child_process').exec;

var config = {
    maxBuffer: 10000 * 1024
};

exec('cd "/www/foo/" && "/path/to/git/bin/git.exe" config --list --global', config, function() {
    console.log(arguments);
});

Однако, как только я укажу среду в config:

var exec = require('child_process').exec;

var config = {
    maxBuffer: 10000 * 1024,
    env: { // <--- this one
    }
};

exec('cd "/www/foo/" && "/path/to/git/bin/git.exe" config --list --global', config, function() {
    console.log(arguments);
});

Разрыв вещей:

Не удалось выполнить команду: fatal: невозможно прочитать файл конфигурации '(null)/(null)/. gitconfig': Нет такого файла или каталога

Я знаю причину, потому что выполненная программа Git больше не выполняется под пользовательской средой (например, в cli) и не может получить каталог пользователя для чтения глобальной конфигурации (в Git, global config = user config), и я считаю, что /(null)/(null)/.gitconfig должен быть /Users/MyName/.gitconfig, который существует.

Мой вопрос в том, как я могу указать текущую пользовательскую среду, сохраняя при этом мои собственные дополнительные свойства среды?

4b9b3361

Ответ 1

Я решил это.

Я извлек текущую среду из process.env и расширил ее своими собственными свойствами:

var environment = process.env;
environment.customProp = 'foo';

var config = {
    maxBuffer: 10000 * 1024,
    env: environment
};

Итак, проблема была в том, что я пропустил всю среду, когда я ее перезаписал.