【问题标题】:Require a file within itself in node.js在 node.js 中需要一个文件
【发布时间】:2014-11-05 23:27:38
【问题描述】:

如何在 node.js 中需要一个文件?例如。 api.js:

var api = require(./api.js);

这样做的最佳做法是什么?

【问题讨论】:

  • 最好不要这样做。
  • 请详细说明。 . .
  • 显然你可以只定义函数,但这是不明智的唯一原因吗?
  • 这应该解决什么问题?
  • require()的重点是加载一个模块。但是,如果你已经在模块中,它已经被加载了,所以真的没有必要尝试从自身内部再次加载它。您可能需要做的只是在模块中调用一个函数,但由于您没有解释您真正要解决的问题,我们无法提供更具体的帮助。

标签: node.js require


【解决方案1】:

你完全可以做到。试试这个,例如(在一个名为 a.js 的文件中):

exports.foo = 'foo';

var a = require('./a');

console.log(a);

exports.bar = 'bar';

console.log(a);

require 执行的地方,它将返回模块a,因为它存在于require 运行的地方,因此字段foo 将被定义但bar 不会被定义。

不过,这样做没有意义。您使用require 将一个原本不可用的对象(即模块)带入您的当前范围。 但您无需执行此操作即可访问您当前所在的模块:它已经完全可用。

上面的代码有效,因为 Node 有处理cyclic dependencies 的规则。在这里,您有一个循环依赖于自身的模块。 Node 没有进入无限循环的要求,而是让require 返回到该点之前构建的模块:部分模块。并且必须设计循环依赖中的模块来处理它们可能获得部分模块的事实。

应尽可能避免循环依赖。大多数情况下,这意味着重构模块以避免相互依赖,方法是将功能转移到一个或多个新模块中。

因此,最好还是不要一开始就这样做。

【讨论】:

  • 是的,我正在编写一个程序,该程序可能会从命令行获得一个参数,该参数代表即将运行的同一文件,因此该文件可能需要自身,并且它发生了,但是它并没有像你说的那样重新要求自己
  • 换句话说:node index.js --files index.js
猜你喜欢
  • 2020-08-08
  • 2011-07-18
  • 1970-01-01
  • 2021-05-31
  • 2015-12-05
  • 2013-03-06
  • 2020-11-27
  • 2018-08-10
相关资源
最近更新 更多