Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在子模块中更好地使用require()_Javascript_Node.js - Fatal编程技术网

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

Javascript 在子模块中更好地使用require(),javascript,node.js,Javascript,Node.js,在谷歌搜索了几个小时后,我希望这里的人能帮我澄清一下我的项目 我有一个项目,它有通过require加载的模块,能够显式命名它们,因为它们包含在package.json中,并且在package.json文件中有main属性。 示例:需要'submodule-name' 该功能工作得很好,但在这些模块中,我都需要这样的主文件:const mainModule=require'../mainModuleName' 这样我就可以访问附加到主要部分的函数和配置变量 我想知道是否有更好的方法来要求这个没有相

在谷歌搜索了几个小时后,我希望这里的人能帮我澄清一下我的项目

我有一个项目,它有通过require加载的模块,能够显式命名它们,因为它们包含在package.json中,并且在package.json文件中有main属性。 示例:需要'submodule-name'

该功能工作得很好,但在这些模块中,我都需要这样的主文件:const mainModule=require'../mainModuleName'

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

我想知道是否有更好的方法来要求这个没有相对路径的主模块,因为我的linter抱怨说,当我独立lint子模块repo时,该模块不存在。此外,我还想利用npm链接来促进未来的发展

有没有一种没有相对路径的方法?也许可以修复主项目文件的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

我认为问题在于方法本身。子模块不应该依赖于主模块,因为这会逆转依赖关系,现在子模块依赖于父模块实现。我建议您避免需要父目录,并在需要时将函数&config传递给子模块


例如:const sub=require'submodule-name'配置我认为问题在于方法本身。子模块不应该依赖于主模块,因为这会逆转依赖关系,现在子模块依赖于父模块实现。我建议您避免需要父目录,并在需要时将函数&config传递给子模块


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

作为替代选项,NPM支持导入本地依赖项,因此您可以创建可包含在两个子模块中的配置包,例如:

package.json

childModule.js


作为一个替代选项,NPM支持导入本地依赖项,因此您可以创建一个配置包,您可以将其包含在两个子模块中,例如

package.json

childModule.js



你能举一个当前文件/文件夹结构的例子吗?@James updated。所以,如果我理解正确,你有一个包含Y&Z依赖项的X项目……它反过来又引用了X项目?对我来说,听起来像是循环引用:/VERY循环引用。现在一切都好了。。。但必须有更好的办法@gaafar的答案似乎是正确的。是的,我认为情况就是这样,但在回答之前我想问清楚,因为我原以为你在运行这段代码时会遇到问题。我在中提出了Gaafar的替代解决方案,该解决方案允许您保持您似乎想要的模块化。您能展示一个当前文件/文件夹结构的示例吗?@James updated。因此,如果我理解正确,您有一个包含Y&Z依赖项的X项目……这反过来又引用了X项目?对我来说,听起来像是循环引用:/VERY循环引用。现在一切都好了。。。但必须有更好的办法@gaafar的答案似乎是正确的。是的,我认为情况就是这样,但在回答之前我想问清楚,因为我原以为你在运行这段代码时会遇到问题。我在中提出了Gaafar的另一种解决方案,它允许您保持您似乎想要的模块化。这是一种非常有趣的方法,在技术上可以减少整个核心应用程序的内存占用,对吗?这也是我的直接反应。子模块应该通过类似这样的方式传递给配置,而不是要求在中传递。我认为这不会减少内存占用。第二次需要一些东西只是从模块缓存中获取上一个模块-它没有使用有意义的额外内存。我不确定内存占用是否会改变,但它肯定对linter友好,并且会使您的子模块更易于测试和维护这最终是我使用的实现,因为我的配置文件将来可能是可变的。这是一种非常有趣的方法,从技术上讲可以减少整个核心应用程序的内存占用,对吗?这也是我的直接反应。子模块应该通过类似这样的方式传递给配置,而不是要求在中传递。我认为这不会减少内存占用。第二次需要一些东西只是从模块缓存中获取上一个模块-它没有使用有意义的额外内存。我不确定内存占用是否会改变,但它肯定对linter友好,并且会使您的子模块更易于测试和维护这最终是我使用的实现,因为我的配置文件将来可能会更改。哦,哇,我不知道t
他的容貌。。。这是金色的,伙计。哦,哇,我不知道这个功能。。。这是金子,伙计。
"myconfig": "file:./common"
const config = require('myconfig')