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

标签 javascript node.js development-environment

我正在使用 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/

相关文章:

javascript - 在javascript中的backbone js中使用时如何创建模型对象

javascript图像onload函数从未被调用

JavaScript 日期时区奇怪的行为

javascript - 在 Javascript 中,为什么 Object.getPrototypeOf([1,2]) 返回一个空列表?

javascript - 使用 Or 和 Not Null 运算符从 NodeJs 模型中查找值

javascript - jQuery 事件未触发

virtual-machine - Vagrant 和/或 Docker 工作流程与完整的 OS X 文件系统集成以获得无缝的本地感觉?

Android - 如何检测 Action 媒体按钮长按

security - 我应该如何将开发和/或测试版网站与公众和搜索引擎机器人隔离开来?

javascript - Node.js 获取字符串中所有出现的子字符串