如何使用Node.js管理服务器端的多个JS文件

时间:2011-04-17 23:01:31

标签: javascript node.js development-environment

我正在使用Node.js开发一个项目,服务器端代码变得越来越大,我想把它拆分成多个文件。它似乎已经在客户端完成了很长时间,通过为每个文件插入script标记来完成开发,并且仅用于分发类似于“Make”用于将所有内容放在一起。我意识到连接所有服务器端代码是没有意义的,所以我不会问如何做到这一点。我能找到的最接近的东西是require(),但它在浏览器中的行为与script不同,因为要求的文件不共享公共名称空间。

查看一些较旧的Node.js项目,例如Shooter,似乎曾经不是这样,或者我在代码中遗漏了一些非常简单的东西。我的require'd文件在编译时和运行时都无法访问全局调用命名空间。有没有简单的方法或者我们是否被迫使所有需要的JS文件完全独立于调用范围?

2 个答案:

答案 0 :(得分:59)

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

// someThings.js

(function() {
    var someThings = ...;

    ...

    module.exports.getSomeThings = function() {
        return someThings();
    }

}());

// main.js

var things = require("someThings");
...
doSomething(things.getSomeThings());

您可以通过写入exports来定义模块,然后为您的模块公开公共API。

处理此问题的最佳方法是依赖注入。您的模块公开了init函数,并将依赖项的对象哈希传递到您的模块中。

如果您真的坚持访问全球范围,那么您可以通过global访问该范围。每个文件都可以写入和读取global对象。你再次不想使用全局变量。

答案 1 :(得分:33)

re @Raynos answer,如果模块文件位于包含它的文件旁边,那么它应该是

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

如果模块已在npm上发布,并通过npm安装,或明确放入./node_modules/文件夹,那么

var things = require("someThings");

是对的。