gpt4 book ai didi

node.js fs.existsSync 对于包含环境变量的路径返回错误的值

转载 作者:太空宇宙 更新时间:2023-11-03 22:44:31 24 4
gpt4 key购买 nike

我正在尝试使用fs.existsSync检查文件是否存在。输入完整的文件系统路径后,成功返回。当路径包含 ~/foo.bar$HOME/foo.bar 等环境变量时,无法找到该文件。

我已经尝试了路径模块中的所有方法来首先按摩路径,但似乎没有任何效果。我应该注意到,文件路径是由用户通过命令行或 JSON 文件输入的。

我知道环境变量位于 process.env 中,但我想知道除了对每个可能的变量进行查找/替换之外是否还有其他方法可以处理这个问题。

最佳答案

环境变量由 shell 扩展。 Node 的 fs 方法直接进行文件系统调用。

process.env 中读取您需要的变量并使用path.join连接。

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

最后,将路径数组重新连接在一起,重新规范化:

path.join.apply(path, p);

关于node.js fs.existsSync 对于包含环境变量的路径返回错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19384256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com