我正在开发一个库,其中我想加载一个或多个相对于requirer的文件。为了更好地说明这一点:
// ~/app.js
import { horn } from 'unicorn'
horn.load()
// ~/node_modules/unicorn/horn.js
export default {
load() {
require('./user.config.js') // Here I would like to load the user config
// relative to "~/app.js"
}
}
我尝试检查全局require
及其parent
属性,但它只给我一个没有更多上下文的文件名。
答案 0 :(得分:1)
这里有你所拥有的:
module.parent
这是加载此模块的第一个模块的模块句柄。因为模块句柄是缓存的,所以这只会反映加载你的第一个模块。
module.filename
这是模块的完全限定文件名。因此,如果您想要父模块的完全限定文件名,可以使用:
module.parent.filename
如果您只想要父模块的路径以便可以从该目录加载某些内容,那么您可以从文件名中拆分路径以使用path
模块获取路径。
path.dirname(module.parent.filename)
如果要从该目录加载文件,可以执行以下操作:
let fileToLoad = path.join(path.dirname(module.parent.filename), "user.config.js");
let config = require(fileToLoad);
你必须记住上面的警告module.parent
只返回第一个加载你的模块,因为之后模块被缓存,只返回原始模块句柄(它没有重新加载)。