开源博客项目Ghost有一个index.js文件,其中只包含此代码。
// # Ghost bootloader
// Orchestrates the loading of Ghost
// When run from command line.
var ghost = require('./core');
ghost();
如果运行node index.js,它将启动应用程序。 require语句中的./core
实际上是一个包含很多子目录的目录,因此这个index.js文件本质上是调用整个目录(其中包含许多函数和文件)作为函数{ {1}},这引出了一个问题,当ghost();
发生时,实际上首先调用的是什么?它会自动在/ core目录中查找index.js文件吗?
例如,在ghost();
内,除了一堆其他目录之外,还有这个./core
文件,其中包含一个函数startGhost
index.js
所以我的问题是,当有这样的设置时,整个目录就像一个函数一样被调用
// # Ghost bootloader
// Orchestrates the loading of Ghost
// When run from command line.
var config = require('./server/config'),
errors = require('./server/errorHandling');
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
function startGhost(app) {
config.load().then(function () {
var ghost = require('./server');
ghost(app);
}).otherwise(errors.logAndThrowError);
}
module.exports = startGhost;
是节点默认在./core中查找index.js文件,在这种情况下,调用startGhost吗?
答案 0 :(得分:2)
我理解的方式是
var ghost = require('./core');
ghost();
和
var ghost = require('./core/index.js');
ghost();
是等价的。换句话说,要求目录只是要求该目录中的index.js的简写。
要处理问题的第二部分,index.js 导出一个函数。这意味着,当您require
index.js时,您的变量将包含一个函数,然后您可以使用ghost()
调用该函数。
重要的是要理解模块不必导出函数,它们也可以导出对象和其他东西。 This post解释得很清楚。