什么是index.js通常用于node.js项目

时间:2014-01-11 14:41:27

标签: node.js web-applications project project-management

除了要求目录中的所有文件(node.js require all files in a folder?)的好方法之外,主要用于index.js的是什么。它有“最佳实践”效用吗?

4 个答案:

答案 0 :(得分:36)

当您将文件夹传递给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;

答案 1 :(得分:11)

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

在Node.js中,Node本身就是Web服务器,所以你不需要来命名任何index.js但是更容易让人们理解哪个文件到先运行

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

答案 2 :(得分:1)

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

  

模块不必是文件。我们还可以创建一个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 :(得分:0)

迟到聚会,但答案只是允许开发人员指定文件夹的公共api!

当文件夹中有一堆JavaScript文件时,从这些文件导出的函数和值的一小部分应该可以在文件夹外部导出。这些精心选择的函数是文件夹的公共api,应从index.js文件中显式导出(或重新导出)。因此,它具有建筑目的。