节点,众所周知,它具有require
功能。使用相对路径调用此函数时。相对路径基于在您的通话位置。这是怎么做到的?
我想创建一个读取文件的函数,该函数也具有相同的行为。当我向它传递相对路径时,路径将根据呼叫的位置确定。
所以,基本上我正在寻找的是将readFile("./my_file.txt")
作为readFile(__dirname + "/my_file.txt")
来解释为__dirname
。
我当然可以随时添加require
,但我正在尝试消除它,我很好奇{{1}}是如何做到的。
答案 0 :(得分:0)
我在我的主app.js中定义了以下方法:
global.rootRequire = function(name) {
return require(__dirname + '/' + name);
}
然后在我可以使用的各种其他文件中:
const data = rootRequire('services/data');
答案 1 :(得分:0)
您应该使用process.cwd()
方法,因为它完全符合您的要求。像@MattB建议的功能,但替换__dirname
function relativeRequire (name) {
return require(process.cwd() + '/' + name);
}
const data = rootRequire('services/data');
答案 2 :(得分:0)
似乎Wrap require in Node.js which can resolve relative path call中的答案是有效的。在被调用的函数中获取堆栈跟踪,然后确定调用者文件所在的位置。
不太喜欢那种解决方案,可能不会使用它。但它是有效的。随意提出更好的方法。