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

时间:2011-06-12 14:10:20

标签: javascript node.js client-side server-side

我知道如何在NodeJS中制作模块(它相当简单)。但是,如果我想制作一些应该在服务器端和客户端环境中工作的东西,那么会有人能做到吗?

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

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

    save: function() {
        // saves the model.
    }
});

上面的代码会使Lib.Model成为一个表示可实例化类型的对象。但是,您如何编写它以便它也符合NodeJS?如果您尝试要求上述文件(require('Model.js')),则不会执行任何操作,因为没有export的分配。但是,如果我这样做,那么我应该在客户端环境中拥有一个无用的export对象吗?

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

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

1 个答案:

答案 0 :(得分:1)

JSHint只检测是否有exports符号,如果存在,则添加到该符号。他们的支票如下:

// Make JSHINT a Node module, if possible.
if (typeof exports == 'object' && exports)
    exports.JSHINT = JSHINT;

检查exports是否为对象,然后检查它是否为null(通过&& exports)。似乎是一种合理的方法,当然它特定于CommonJS module system(这是Node使用的)。