如何解析节点中的相对路径?

时间:2011-05-26 21:46:18

标签: node.js

最近碰到了这种情况 - 我有一个像这样的目录路径的环境变量:

var fooDir = process.env.FOO_DIR;

我想确保这个目录存在同步mkdir(以后某个时候):

fs.mkdirSync(fooDir, mode);

但是,如果用户通过实际〜/ path节点提供了环境变量,则无法解析它

export FOO_DIR='~/foodir'

节点有没有办法在不调用子进程exec调用实际shell的情况下解决这个问题?目前我的解决方案是像这样做一个替换自己:

fooDir = fooDir.replace(/^~\//, process.env.HOME + '/');

只是好奇是否有人有更好的解决方案。

3 个答案:

答案 0 :(得分:4)

你说得对:〜由 shell 扩展,而不是操作系统,就像*一样。 node.js所包含的C文件函数都没有处理〜如果你想要这个,你必须自己进行替换,就像你已经显示的那样。当我支持允许相对文件路径的配置文件时,我自己在C中完成了这个。

但是,您应该处理未定义HOME的情况;我相信这会发生在使用bash的非交互登录时,用户可以随时选择取消设置。

答案 1 :(得分:0)

签出Rekuire,它是一个节点模块,可以解决NodeJ中的相对路径问题。

答案 2 :(得分:0)

您可以使用path.join将其转换为绝对路径:

const path = require('path')

const absolutePath = path.join(process.cwd(), relativePath)