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

问题描述 投票:1回答:2

app.js

require('./modules/mod');

模块/ MOD / mod.js

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

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

我认为module.require()做到了这一点,但它似乎给了我同样的错误,需要()是我将我的代码移动到单独的模块(mod.js)后。

编辑:

我发现我可以使用require.parent.module它似乎工作。如果不建议,请告诉我。

node.js module require
2个回答
1
投票

require使用与当前模块相关的路径。可以通过从父模块提供require来实现:

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

使用如下:

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

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

require('../secondmodule');

如果mod必须与secondmodule分离,可以用一些共同模式向它提供依赖性,例如,依赖注入或服务定位器。


0
投票

次要可选答案:

module.exports = () => {
   module.parent.require('./modules/secondmodule');
}
© www.soinside.com 2019 - 2024. All rights reserved.