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

Javascript 如何使用Node.JS在服务器端管理多个JS文件,javascript,node.js,development-environment,Javascript,Node.js,Development Environment,我正在使用Node.js进行一个项目,服务器端代码变得足够大,我想将其拆分为多个文件。似乎这已经在客户端完成了很久,开发是通过为每个文件插入脚本标记来完成的,并且仅用于分发类似于“Make”的东西,用于将所有内容放在一起。我意识到把所有的服务器端代码封装起来是没有意义的,所以我不是在问怎么做。我能找到的最接近使用的东西是require(),但是它的行为与浏览器中的script不同,因为required文件不共享公共名称空间 看看一些较旧的Node.js项目,比如,看起来以前不是这样,或者我的代码

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


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

您不需要一个公共名称空间,因为全局名称是邪恶的。在节点中,我们定义模块

// someThings.js

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

    ...

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

}());

// main.js

var things = require("someThings");
...
doSomething(things.getSomeThings());
您可以定义一个模块,然后通过写入
exports
为您的模块公开一个公共API

处理这个问题的最好方法是依赖项注入。您的模块公开一个
init
函数,并将依赖项的对象散列传递到模块中

如果您确实坚持访问全局范围,那么您可以通过
global
访问它。每个文件都可以写入和读取
全局
对象。同样,您不想使用全局变量

re,如果模块文件位于包含它的文件旁边,则应该是

var things = require("./someThings");
如果模块在npm上发布并通过npm安装,或显式放入
/node\u modules/
文件夹,则

var things = require("someThings");

正确。

谢谢您提供的信息,标记为正确。我大体上同意globals==邪恶的概念,但他们似乎有自己的位置。例如,如果我想为依赖于其他地方的值的给定“类”设置一个基属性,该怎么办?例如:
SomeClass.prototype.baseProp=SomeOtherClass.prototype.prop*2
在这种情况下,我要么被迫通过构造函数在对象实例化时设置它,要么按照您的建议使用
global
对象。我认为后者可能最合适。@XHR然后
SomeClass
依赖于
SomeOtherClass
,而您
require(“SomeOtherClass”)
在SomeClass.js中。我的代码中只有一个全局变量
global.\ux=require(“下划线”)
因为我在每个文件中都使用它。这是
global
的唯一用例。如果您需要实际的节点模块(通过npm安装,安装在PROJECT\u ROOT/node\u modules下),则需要第二行代码。如果您需要自己的文件(即ROOT_DIR/models/thing.js),则需要执行第一行代码(尽管可以去掉.js扩展名)。我不确定,但您可以使用.Worked for me.:)更改此行为