我可以用一个require语句加载多个文件吗?

也许这个问题有点傻,但是有可能加载多个.js文件与一个需求语句? 喜欢这个:

var mylib = require('./lib/mylibfiles'); 

并使用:

 mylib.foo(); //return "hello from one" mylib.bar(): //return "hello from two" 

并在文件夹mylibfiles将有两个文件:

One.js

 exports.foo= function(){return "hello from one";} 

Two.js

 exports.bar= function(){return "hello from two";} 

我正打算把一个package.json文件夹加载所有的文件,但我不知道如何。 我正在考虑的其他的aproach是有一个index.js输出的一切,但我会重复工作。

谢谢!!

PD:我正在使用windows 7机器上的nodejs v0.611

首先使用require不会重复任何东西。 它加载模块并将其caching起来,所以再次调用require会从内存中获取它(因此,您可以在不进行源代码交互的情况下修改模块 – 有时候这是需要的,例如,当您想要在模块中存储数据库连接时) 。

另外, package.json不会加载任何内容,也不会与您的应用程序进行交互。 它只用于npm

现在你不能一次要求多个模块。 例如,如果One.jsTwo.js都定义了具有相同名称的函数,会发生什么? 还有更多的问题。

但是你可以做的是编写额外的文件,比如带有以下内容的modules.js

 module.exports = { one : require('./one.js'), two : require('./two.js'), /* some other modules you want */ } 

然后你可以简单地使用

 var modules = require('./modules.js'); modules.one.foo(); modules.two.bar(); 

是的,根据节点文档 ,您可能需要一个文件夹作为模块。 假设您想要()一个名为./mypack/的文件夹。

./lib/目录下,在./lib/目录下创build一个name./mypack/ ”的文件夹和一个名字相同的main javascript文件。

 { "name" : "mypack", "main" : "./lib/mypack.js" } 

现在你可以使用require('./mypack') ,节点将加载./mypack/lib/mypack.js

但是,如果你不包含这个package.json文件,它可能仍然有效。 如果没有该文件,节点将尝试加载./mypack/index.js ,或者如果不存在,./ ./mypack/index.node

我的理解是,这可能是有益的,如果你已经把你的程序分成许多JavaScript文件,但不想连接它们进行部署。

我有一个需要多个模块的代码片段,但是它不会像你的post所build议的那样把它们聚集在一起。 但是,这可以用我发现的一个技巧来克服。

 function requireMany () { return Array.prototype.slice.call(arguments).map(function (value) { try { return require(value) } catch (event) { return console.log(event) } }) } 

而你这样使用它

 requireMany("fs", "socket.io", "path") 

哪个会返回

 [ fs {}, socketio {}, path {} ] 

如果找不到模块,则会向控制台发送错误。 它不会中断程序。 该错误将在数组中显示为未定义。 数组不会更短,因为其中一个模块加载失败。

然后,你可以将这些数组元素中的每一个绑定到一个variables名称,如下所示:

 var [fs, socketio, path] = requireMany("fs", "socket.io", "path") 

它基本上像一个对象一样工作,但将键和它们的值分配给全局名称空间。 所以,就你而言,你可以这样做:

 var [foo, bar] = requireMany("./foo.js", "./bar.js") foo() //return "hello from one" bar() //return "hello from two" 

如果你确实想让它在错误的时候破坏程序,只需使用这个更小的修改版本即可

 function requireMany () { return Array.prototype.slice.call(arguments).map(require) }