我正在学习hexo的源代码,这是一个基于node.js的项目。 并且有一个文件init.js:
if (results.config){
require('./plugins/tag');
require('./plugins/deployer');
require('./plugins/processor');
require('./plugins/helper');
require('./plugins/filter');
require('./plugins/generator');
}
为什么这些需要的陈述没有参考?所以我检查了这些文件夹下的每个index.js(例如标签),index.js看起来像:
require('./init');
require('./config');
require('./generate');
require('./server');
require('./deploy');
require('./migrate');
require('./new');
require('./routes');
require('./version');
require('./render');
未找到导出。我想知道这些是如何工作的。
答案 0 :(得分:0)
我查看了您正在谈论的来源,您问题的基本答案是这些要求中的代码会运行。通常,你是正确的,你需要进行某种导出才能使用这些文件中的对象,但是hexo有点不标准。
而不是让每个模块独立且相当不可知(除非通过要求),他们正在做的是创建一个名为'extend'的对象(在extend.js中查看)然后创建每个单独的文件(例如./init ,./migrate等)需要extend.js并以一种命名空间的方式挂起新的对象和函数。
如果查看这些文件的末尾,您会看到对extend.tag.register和其他人的调用。模块在需要时被缓存,因此在实践中它会像其他语言中的单例一样运行它们。
答案 1 :(得分:0)
正如保罗指出的那样,你看到的要求应该被视为功能单元本身,而不是返回任何有用的值。每个文件都调用一个函数来修改内部状态。