node.js 项目中的 index.js 用于啥?

Posted

技术标签:

【中文标题】node.js 项目中的 index.js 用于啥?【英文标题】:What is index.js used for in node.js projects?node.js 项目中的 index.js 用于什么? 【发布时间】:2014-01-30 13:31:42 【问题描述】:

除了要求目录中的所有文件 (node.js require all files in a folder?) 的好方法之外,index.js 主要用于什么?

【问题讨论】:

关于如何使用 Napi 制作本机 nodejs 插件的示例似乎使用 binding.js 并且没有 index.js 文件 - 但似乎没有在任何地方讨论过。我也经常看到main.jsMain.js。我怀疑但目前无法确认其中只有 index.js 在 Node 中具有特殊含义。 【参考方案1】:

迟到了,但答案只是让开发人员指定文件夹的公共 api!

当文件夹中有一堆 javascript 文件时,从这些文件中导出的函数和值中只有一小部分可以导出到文件夹之外。这些精心挑选的函数是文件夹的公共 api,应该从 index.js 文件中显式导出(或重新导出)。因此,它服务于架构目的。

【讨论】:

【参考方案2】:

这是一篇很好的文章,解释了 Node.js 如何查找所需的模块 https://medium.freecodecamp.org/requiring-modules-in-node-js-everything-you-need-to-know-e7fbd119be8,带有文件夹和 index.js 文件

模块不一定是文件。我们也可以创建一个 find-me 文件夹 在 node_modules 下并在其中放置一个 index.js 文件。相同 require('find-me') 行将使用该文件夹的 index.js 文件:

~/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.

>

【讨论】:

【参考方案3】:

当您将文件夹传递给 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 同步加载目录中的所有文件(异步设置导出通常会导致可怕的错误)并将它们附加到 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;

【讨论】:

【参考方案4】:

通常在其他语言中,Web 服务器会在访问类似 / 的目录时首先查找某些文件以优先加载,传统上这是:索引或默认值。在 php 中,它将是 index.php,或者只是纯 HTML,它将是 index.html

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

index.js 通常处理您的应用程序启动、路由和应用程序的其他功能,并且确实需要其他模块来添加功能。如果您正在运行一个网站或 Web 应用程序,它还将处理成为一个基本的 HTTP Web 服务器,以取代更传统的东西(如 Apache)的角色。

【讨论】:

我说的更多是代码/项目管理和require() 的功能,而不是服务页面;我提供的链接就是一个例子。 这对通用节点项目有效。如果项目是一个库,那么index.js should provide the module API.

以上是关于node.js 项目中的 index.js 用于啥?的主要内容,如果未能解决你的问题,请参考以下文章

Socket.io聊天示例node.js需要

在node.js中使用ejs的demo 第五篇

TypeError:x 不是 Node.js 中的函数

Node.js中模块加载机制

Node.js中模块加载机制

Node.js中模块加载机制