最近碰到了这种情况 - 我有一个像这样的目录路径的环境变量:
var fooDir = process.env.FOO_DIR;
我想确保这个目录存在同步mkdir(以后某个时候):
fs.mkdirSync(fooDir, mode);
但是,如果用户通过实际〜/ path节点提供了环境变量,则无法解析它
export FOO_DIR='~/foodir'
节点有没有办法在不调用子进程exec调用实际shell的情况下解决这个问题?目前我的解决方案是像这样做一个替换自己:
fooDir = fooDir.replace(/^~\//, process.env.HOME + '/');
只是好奇是否有人有更好的解决方案。
答案 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)