我如何在具有父上下文的模块中使用 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');
}
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');
}