大型多文件节点项目中的require()

时间:2012-05-16 04:34:30

标签: node.js

我正在开发一个大型Node项目。当然,我想将其分解为多个源文件。我在大多数源文件中使用了标准库中的许多模块,而且我自己的文件也有很多我想在几乎所有地方使用。

我一直在通过在每个源文件的开头包含一个巨大的require块来完成这项工作,但这感觉非常多余。有一个更好的方法吗?或者这是Node令人钦佩的模块系统的预期后果吗?

4 个答案:

答案 0 :(得分:3)

您可以使用容器模块加载一系列模块。例如,给定以下项目结构:

lib/
    index.js
    module1.js
    module2.js
main.js

您可以index.js导入库中的其他模块。

# index.js
module.exports.module1 = require('./module1');
module.exports.module2 = require('./module2');

然后main.js只需导入一个模块:

# main.js
var lib = require('./lib');

lib.module1.doSomething();
lib.module2.doSomethingElse();

可以扩展此技术,减少冗余导入。

答案 1 :(得分:2)

我通常会说,需要块比在Node中使用global更好。

您需要记住需求已缓存,因此当您将它们放入所有代码模块中时,您每次都会获得相同的实例而不是新实例。

这样做可确保您获得具有所需名称空间的相应代码,而使用全局将包含您不需要的内容。使用require方式执行此操作也会使您的代码更容易移植。

答案 2 :(得分:1)

嗯,这里有几件事。

首先,如果您的许多文件一遍又一遍地需要相同的库,您可能需要退一步,确定是否真的以正确的方式破坏了代码。也许有一个更好的组织,只有源文件的子集需要某些库?

其次,请记住,global对象在Node.js应用中的所有require d文件之间共享。您的“根”源文件(例如index.js)可以执行global.fs = require('fs');之类的操作,然后可以从所有各种文件中访问它。这样就不需要require一个充满require个文件的文件。 (在Node.js中,与浏览器不同,您必须通过预先global.显式声明您正在访问全局变量。)

这对于CRUD类型的Express应用程序来说是一个好主意,在这些应用程序中,您拥有大量相同的控制器代码,但每个视图必须略有不同,您只想将它​​们分开,而不是针对任何特定的组织结构,但只是为了使调试更容易(此文件中的错误,而不是该文件)。如果应用程序的结构比这个更复杂,那么在使用该技巧之前,请对全局变量采取常规警告。

答案 3 :(得分:0)

通过require-file-directory需要多个没有绝对路径的文件。

1-单个语句中可能需要多个文件。 2-可以要求只带有名字的文件。

访问解决方案:https://www.npmjs.com/package/require-file-directory