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

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

alh asked 2020-02-21T11:10:44Z
3个解决方案
41 votes

当您将文件夹传递到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;
MattNewton answered 2020-02-21T11:21:32Z
11 votes

通常,在其他语言中,Web服务器在访问优先级类似/的目录时会先查找某些文件,传统上,它是:index或default。 在php中,它将是index.php或只是纯HTML,它将是index.html

在Node.js中,Node本身就是Web服务器,因此您无需命名任何index.js,但使人们更容易理解首先运行哪个文件。

index.js通常处理应用程序的启动,路由和应用程序的其他功能,并且确实需要其他模块来添加功能。 如果您运行的是网站或Web应用程序,它也将成为基本的HTTP Web服务器,取代了诸如Apache之类的更传统的角色。

Steven Leggett answered 2020-02-21T11:22:02Z
2 votes

这是一篇很好的文章,解释了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.
{}
>
onmyway133 answered 2020-02-21T11:22:27Z
translate from https://stackoverflow.com:/questions/21063587/what-is-index-js-used-for-in-node-js-projects