我如何在具有父上下文的模块中使用 require ?

How do I use require inside a module with the parents context?

app.js

require('./modules/mod');

modules/mod/mod.js

modules.exports = () => {
   require('./modules/secondmodule');
}

本质上,我希望上面的代码能够需要模块,但使用本身被调用的相同上下文,例如同一文件夹中的另一个模块,无需使用相对路径。

我认为 module.require() 这样做了,但它似乎给了我与 require() 相同的错误,在我将我的代码移到单独的模块 (mod.js) 之后。

编辑:

从那以后我发现我可以使用 require.parent.module 并且它似乎有效。如果不建议这样做,请告诉我。

require 使用相对于当前模块的路径。可以通过从父模块提供 require 来做到这一点:

modules.exports = parentRequire => {
   parentRequire('./modules/secondmodule');
}

使用方式如下:

require('./modules/mod')(require);

使用相对模块是正确的,因为子模块不应该知道它被评估的上下文:

require('../secondmodule');

如果 mod 必须与 secondmodule 分离,可以使用一些通用模式为其提供依赖关系,例如依赖注入或服务定位器。

次选答案:

module.exports = () => {
   module.parent.require('./modules/secondmodule');
}