问题描述
|
我知道如何在NodeJS中制作模块(这很简单)。但是,如果我想做一些在服务器和客户端环境中都可以使用的东西,那能做到吗?
假设您要创建一个Model类型(\“ class \”)。假设您有一个名为
Lib.define()
的类创建函数。所以,你这样写:
Lib.Model = Lib.define({
init: function() {
// constructor...
},save: function() {
// saves the model.
}
});
上面的代码将使Lib.Model成为代表可实例化类型的对象。但是,您将如何编写它使其也兼容NodeJS?如果尝试要求上述文件(require(\'Model.js\')
),则由于对export
没有分配,它不会做任何事情。但是,如果我这样做了,那我应该只是在客户端环境中有一个无用的“ 3”对象吗?
除了要求可以简单地加载和解析JS并在全局工作以使上述代码在全局变量Lib
中生成Model
成员之外,还有其他方法可以做到这一点吗?
我现在正在研究vm,但不确定如何正确使用它。我确实有一个文件/类加载器,可以像Dojo一样解析路径并加载脚本。我是否应该在那里写一些在客户端上正常工作的逻辑(放置脚本标签),对于NodeJS,它只读取文件内容和“ 7”?
解决方法
JSHint只是检测是否有一个
exports
符号,如果有则添加它。他们的支票看起来像这样:
// Make JSHINT a Node module,if possible.
if (typeof exports == \'object\' && exports)
exports.JSHINT = JSHINT;
那会检查exports
是否是一个对象,然后检查它是否不是null
(通过&& exports
)。似乎是一种合理的方法,尽管它当然是特定于CommonJS模块系统(Node使用的系统)。