如何用Node.jspipe理多个JS文件服务器端

我正在使用Node.js进行一个项目,服务器端代码变得足够大,我想将它分成多个文件。 看起来,这已经完成了很长时间的客户端,开发是通过为每个文件插入一个script标签来完成的,而只是为了分发就像是用来把所有东西放在一起的东西。 我意识到在concatting所有的服务器端代码是没有意义的,所以我不问如何做到这一点。 我能find的最接近的东西是require() ,但它不像浏览器中的script那样需求文件不共享通用名称空间。

看看一些较老的Node.js项目,比如Shooter ,看起来这种情况并非如此,或者我在代码中丢失了一些非常简单的东西。 我的require'd文件不能在编译时访问全局调用名称空间,也不能运行时。 有没有简单的方法呢,还是我们不得不使所有的需求JS文件完全独立于调用范围?

你不需要一个通用的命名空间,因为全局variables是邪恶的。 在节点中我们定义模块

 // someThings.js (function() { var someThings = ...; ... module.exports.getSomeThings = function() { return someThings(); } }()); // main.js var things = require("someThings"); ... doSomething(things.getSomeThings()); 

您定义一个模块,然后通过写入导出来为您的模块公开一个公共API。

处理这个问题的最好方法是dependency injection。 你的模块公开一个init函数,并将一个对象散列的依赖关系传递给你的模块。

如果你真的坚持访问全球范围,那么你可以通过global访问。 每个文件都可以写入和读取到global对象。 同样你不想使用全局variables。

重新@Raynos回答 ,如果模块文件是包含它的文件旁边,应该是

 var things = require("./someThings"); 

如果模块在npm上发布,并通过npm安装,或者明确地将其放入./node_modules/文件夹,则

 var things = require("someThings"); 

是正确的。