node.js fs.existsSync为包含环境变量的路径返回不正确的值
我正在尝试使用来检查文件是否存在。当输入完整的文件系统路径时,它将成功返回。当路径包含环境变量(如node.js fs.existsSync为包含环境变量的路径返回不正确的值,node.js,Node.js,我正在尝试使用来检查文件是否存在。当输入完整的文件系统路径时,它将成功返回。当路径包含环境变量(如~/foo.bar或$HOME/foo.bar)时,它无法找到该文件 我已经尝试了路径模块中的所有方法,首先对路径进行按摩,但似乎没有任何效果。我应该注意,文件路径是由用户通过命令行或JSON文件输入的 我知道环境变量存在于process.env中,但我想知道除了查找/替换每个可能的变量之外,是否还有其他方法来处理这个问题。环境变量由shell展开。节点的fs方法直接进行文件系统调用 从中读取所需的
~/foo.bar
或$HOME/foo.bar
)时,它无法找到该文件
我已经尝试了路径模块中的所有方法,首先对路径进行按摩,但似乎没有任何效果。我应该注意,文件路径是由用户通过命令行或JSON文件输入的
我知道环境变量存在于
process.env
中,但我想知道除了查找/替换每个可能的变量之外,是否还有其他方法来处理这个问题。环境变量由shell展开。节点的fs
方法直接进行文件系统调用
从中读取所需的变量并用于连接
path.join(process.env.HOME, 'foo.bar');
(请记住,如果需要跨平台,Windows上没有HOME
变量;我相信这是USERPROFILE
)
因为您要处理用户输入,所以必须自己解析路径组件 首先,规范化输入字符串并将其拆分为数组
var p = path.normalize(inputStr).split(path.sep);
如果第一个元素是~
,请将其替换为主目录
if (p[0] == '~') p[0] = process.env.HOME || process.env.USERPROFILE; // Windows
然后在每个元素上循环,如果它以$
开头,则替换它
for (var i = 0; i < p.length; i++) {
if (p[i][0] == '$') {
var evar = p[i].substr(1);
if (process.env[evar]) p[i] = process.env[evar];
}
}
环境变量由shell展开。节点的
fs
方法直接进行文件系统调用
从中读取所需的变量并用于连接
path.join(process.env.HOME, 'foo.bar');
(请记住,如果需要跨平台,Windows上没有HOME
变量;我相信这是USERPROFILE
)
因为您要处理用户输入,所以必须自己解析路径组件 首先,规范化输入字符串并将其拆分为数组
var p = path.normalize(inputStr).split(path.sep);
如果第一个元素是~
,请将其替换为主目录
if (p[0] == '~') p[0] = process.env.HOME || process.env.USERPROFILE; // Windows
然后在每个元素上循环,如果它以$
开头,则替换它
for (var i = 0; i < p.length; i++) {
if (p[i][0] == '$') {
var evar = p[i].substr(1);
if (process.env[evar]) p[i] = process.env[evar];
}
}
是否改用process.env.HOME?然后使用path.join获得正确的路径
fs.existsSync(path.join(process.env.HOME,"foo.bar"));
是否改用process.env.HOME?然后使用path.join获得正确的路径
fs.existsSync(path.join(process.env.HOME,"foo.bar"));
我真的希望答案是一个内置的,但这应该会起作用我真的希望答案是一个内置的,但这应该会起作用