我有一个项目,它有通过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
答案 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')