除了要求目录中的所有文件(node.js require all files in a folder?)的好方法之外,主要用于index.js
的是什么。它有“最佳实践”效用吗?
答案 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文件中显式导出(或重新导出)。因此,它具有建筑目的。