当目录被视为函数时,首先调用什么?

时间:2014-01-01 18:43:06

标签: node.js

开源博客项目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吗?

1 个答案:

答案 0 :(得分:2)

我理解的方式是

var ghost = require('./core');
ghost();

var ghost = require('./core/index.js');
ghost();

是等价的。换句话说,要求目录只是要求该目录中的index.js的简写。

要处理问题的第二部分,index.js 导出一个函数。这意味着,当您require index.js时,您的变量将包含一个函数,然后您可以使用ghost()调用该函数。

重要的是要理解模块不必导出函数,它们也可以导出对象和其他东西。 This post解释得很清楚。