关于javascript:如何使用Node.js在服务器端管理多个JS文件

How to manage multiple JS files server-side with Node.js

我正在使用Node.js进行项目,并且服务器端代码越来越大,我想将其拆分为多个文件。似乎已经在客户端完成了很长时间,开发是通过为每个文件插入script标记来完成的,并且仅用于分发,就像" Make"之类的用于将所有内容组合在一起。我意识到,容纳所有服务器端代码毫无意义,所以我不问如何做到这一点。我能找到的最接近的东西是require(),但是它的行为不像script在浏览器中那样,因为要求文件不共享公共命名空间。

看看一些较旧的Node.js项目,例如Shooter,似乎曾经不是这种情况,或者我的代码中缺少一些非常简单的东西。我的required文件无法在编译时或运行时访问全局调用名称空间。有什么简单的方法可以解决这个问题,还是我们必须使所有需要的JS文件完全独立于调用范围?


您不希望使用通用名称空间,因为全局变量是邪恶的。在节点中,我们定义模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 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对象。同样,您不想使用全局变量。


是@Raynos答案,如果模块文件在包含它的文件旁边,则应该是

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

如果该模块在npm上发布并通过npm安装,或显式放入./node_modules/文件夹中,则

1
var things = require("someThings");

是正确的。