我知道如何在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)
?。
答案 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使用的)。