如何在NodeJS中使用用户的环境执行

How to exec in NodeJS using the user's environment?

本文关键字:用户 环境 执行 NodeJS      更新时间:2023-09-26

我正在尝试在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);
});

但是,一旦我将环境指定给配置:

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

Things break:

Command failed: fatal:无法读取配置文件"(null)/(null)/。gitconfig':没有这样的文件或目录

我知道原因,因为执行的Git程序不再在用户环境下执行(就像在cli中一样),无法检索用户目录来读取全局配置(在Git中,global config = user config),我认为/(null)/(null)/.gitconfig应该是确实存在的/Users/MyName/.gitconfig

我的问题是,我如何在指定当前用户环境的同时仍然能够指定我自己的附加环境属性?

我解决了。

我从process.env中检索了当前环境,并用我自己的属性扩展了它:

var environment = process.env;
environment.customProp = 'foo';
var config = {
    maxBuffer: 10000 * 1024,
    env: environment
};

所以问题是当我覆盖它时,我错过了整个环境