在node.js项目中,index.js用于什么?

84

似乎使用Napi制作本地nodejs插件的示例都使用binding.js,并且没有index.js文件 - 但似乎没有任何地方讨论这个问题。我也经常看到main.jsMain.js。我怀疑但目前无法确认,其中只有index.js在Node中具有特殊含义。 - hippietrail
4个回答

67

当你将一个文件夹传递给Node的require()函数时,它会检查是否有package.json文件作为入口点。如果没有定义这个入口点,它会检查是否有index.js文件,最后检查是否有index.node文件(这是c++扩展格式)。因此,index.js很可能是需要模块的入口点。

请参阅官方文档:http://nodejs.org/api/modules.html#modules_folders_as_modules

同时,你想知道如何在一个目录中引用所有的文件。通常,你可以通过一个暴露出一些封装接口给这些文件的index.js文件来引用一个目录;每个模块的做法不同。但是,假设你想在引用文件夹时包括该文件夹的内容(注意,这不是最佳实践,比你想象的少见)。那么,你可以使用一个index.js文件,同步加载目录中的所有文件(异步设置exports通常会导致可怕的bug),并将它们附加到module.exports中,像这样:

var path = require('path'),
    dir = require('fs').readdirSync(__dirname + path.sep);

dir.forEach(function(filename){

    if(path.extname(filename) === '.js' && filename !== 'index.js'){
        var exportAsName = path.basename(filename);
        module.exports[exportAsName] = require( path.join( __dirname, filename) );
    }

});

虽然我很少看到有人想使用这种模式——大多数时候,你希望你的index.js看起来像这样:

var part1 = require('./something-in-the-directory'),
    part2 = require('./something-else');
....
module.exports = myCoolInterfaceThatUsesPart1AndPart2UnderTheHood;

17

通常在其他语言中,当访问类似于 / 的目录时,Web服务器会首先查找某些文件进行加载,传统上这些文件可以是:index 或 default。在 PHP 中,它可能是 index.php,而在纯 HTML 中,它可能是 index.html。

在 Node.js 中,Node 本身就是 Web 服务器,因此您不需要将任何东西命名为 index.js,但是这样做更容易让人们理解要运行哪个文件首先

index.js 通常处理您的应用程序启动、路由和其他功能,并且需要其他模块来添加功能。 如果您正在运行网站或 Web 应用程序,则还将成为基本 HTTP Web 服务器,替换类似 Apache 等传统服务器的角色。


1
我所说的更多是关于代码/项目管理和 require() 函数的功能,而不是提供页面;例如,我提供的链接就是一个例子。 - alh
这适用于通用的 Node 项目。如果该项目是一个库,则 index.js 应提供模块 API - Kamafeather

10
这是一篇很好的文章,解释了Node.js如何查找所需模块。在node_modules文件夹下,我们不仅可以放置文件,还可以创建一个名为find-me的文件夹,并在其中放置一个index.js文件。同样使用require('find-me')命令时,会使用该文件夹中的index.js文件。文章链接:https://medium.freecodecamp.org/requiring-modules-in-node-js-everything-you-need-to-know-e7fbd119be8
~/learn-node $ mkdir -p node_modules/find-me
~/learn-node $ echo "console.log('Found again.');" > node_modules/find-me/index.js
~/learn-node $ node
> require('find-me');
Found again.
{}
>

4
迟到了,但答案很简单,只需允许开发人员指定文件夹的公共API!
当你有一堆JavaScript文件在一个文件夹中时,这些文件中导出的函数和值仅应该有少量可以在文件夹外部被导出。 这些精心挑选的函数是文件夹的公共API,应该从index.js文件明确地导出(或重新导出)。 因此,它具有架构目的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接