如何使JavaScript与客户端和服务器端兼容?

如何使JavaScript与客户端和服务器端兼容?,javascript,node.js,client-side,server-side,Javascript,Node.js,Client Side,Server Side,我知道如何在NodeJS中创建模块(这相当简单)。然而,如果我想做一些应该在服务器端和客户端环境中都能工作的东西,那么我们能做到这一点吗 假设您想要创建一个模型类型(“类”)。假设您有一个名为Lib.define()的类创建函数。所以,你写下: Lib.Model = Lib.define({ init: function() { // constructor... }, save: function() { // saves the m

我知道如何在NodeJS中创建模块(这相当简单)。然而,如果我想做一些应该在服务器端和客户端环境中都能工作的东西,那么我们能做到这一点吗

假设您想要创建一个模型类型(“类”)。假设您有一个名为
Lib.define()
的类创建函数。所以,你写下:

Lib.Model = Lib.define({
    init: function() {
        // constructor...
    },

    save: function() {
        // saves the model.
    }
});
上面的代码将使Lib.Model成为一个表示可实例化类型的对象。然而,您将如何编写它以使其也符合NodeJS?如果您试图要求上面的文件(
require('Model.js')
),它不会做任何事情,因为没有分配给
export
。但是,如果我这样做,那么我是否应该在客户端环境中拥有一个无用的
导出
对象

除了需要加载和解析JS并全局工作,以便上述代码在全局变量
Lib
中生成
Model
成员之外,还有其他方法可以做到这一点吗

我现在正在调查,但我不确定我该如何正确使用它。我有一个文件/类加载器,它解析路径并加载脚本,就像Dojo一样。我是否应该在那里编写一些在客户端正常工作的逻辑(放置脚本标记),对于NodeJ,它只需读取文件内容和
vm.runInThisContext(code)
?。

只需检测是否有
导出
符号,如果有则添加到该符号。他们的支票是这样的:

// Make JSHINT a Node module, if possible.
if (typeof exports == 'object' && exports)
    exports.JSHINT = JSHINT;
检查
exports
是否为对象,然后检查它是否为
null
(通过
&&exports
)。这似乎是一种合理的方法,当然它是特定于(节点使用的)的