我正在使用 Node.js 开发一个项目,并且服务器端代码变得足够大,以至于我想将其拆分为多个文件。似乎这已经在客户端完成了很长时间,开发是通过为每个文件插入一个 script
标记来完成的,并且仅用于分发类似于“Make”之类的东西,用于将所有内容放在一起。我意识到连接所有服务器端代码没有意义,所以我不是在问如何做到这一点。我能找到的最接近的东西是 require()
,但它的行为不像 script
在浏览器中那样,因为需要的文件不共享公共(public)命名空间。
查看一些较旧的 Node.js 项目,例如 Shooter ,看来这曾经不是这种情况,或者我在我的代码中遗漏了一些非常简单的东西。我需要的文件在编译时和运行时都无法访问全局调用命名空间。是否有任何简单的方法可以解决这个问题,或者我们是否被迫让所有需要的 JS 文件完全独立于调用范围?
最佳答案
你不想要一个公共(public)命名空间,因为全局变量是邪恶的。在 Node 中我们定义模块
// someThings.js
(function() {
var someThings = ...;
...
module.exports.getSomeThings = function() {
return someThings();
}
}());
// main.js
var things = require("someThings");
...
doSomething(things.getSomeThings());
您定义一个模块,然后通过写入 exports
为您的模块公开一个公共(public) API。
处理这个问题的最好方法是依赖注入(inject)。您的模块公开了一个 init
函数,并且您将依赖项的对象哈希传递到您的模块中。
如果你真的坚持要访问全局作用域,那么你可以通过global
来访问它。每个文件都可以写入和读取 global
对象。同样,您不想使用全局变量。
关于javascript - 如何使用 Node.js 在服务器端管理多个 JS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5697061/