在子模块中更好地使用require()

时间:2017-08-25 14:50:47

标签: javascript node.js

在谷歌搜索了几个小时关于这个话题无济于事之后,我希望这里的某个人能够帮助我澄清这个项目......

我有一个项目,它有通过require()加载的模块,并且能够明确地命名它们,因为它们包含在package.json中并且具有" main" package.json文件本身的属性。 例如:require('submodule-name')

功能完美,但在每个模块中,我都需要像这样的主文件:const mainModule = require('../../mainModuleName');

这样我就可以访问附加到主要部分的函数和配置变量。

我想知道是否有更好的方法来require()没有相对路径的这个主模块,因为我的linter抱怨当我自己lint子模块repo时模块不存在。此外,我还希望将npm link用于未来发展的快乐。

有没有办法在没有相对路径的情况下这样做?也许修复主项目文件的package.json

更新: 文件/文件夹结构如下:

/
  mainModule.js
/node_modules
  childModule.js <- this requires the mainModule file with a relative path
/modules
  anotherChildModule.js <- same relative path requirement of mainModule

2 个答案:

答案 0 :(得分:3)

我认为问题出在方法本身。子模块不应该依赖于主模块,因为这会反转依赖关系(现在子模块依赖于父模块实现)。我建议你避免要求父目录,并传递函数&amp;当你需要它时,配置到子模块。

例如:const sub = require('submodule-name')(config)

答案 1 :(得分:1)

作为替代选项,NPM支持导入本地依赖项,因此您可以创建一个&#34; config&#34;您可以包含在两个子模块中的包,例如

<强>的package.json

"myconfig": "file:./common"

<强> childModule.js

const config = require('myconfig')