我知道如何在NodeJS中制作模块(这很简单)。但是,如果我想做一些在服务器和客户端环境中都可以使用的东西,那么能做到这一点吗?
假设您要创建一个Model类型(“类”)。假设您有一个名为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)
? 最佳答案
JSHint仅检测是否存在exports
符号,如果存在,则将其添加。他们的支票看起来像这样:
// Make JSHINT a Node module, if possible.
if (typeof exports == 'object' && exports)
exports.JSHINT = JSHINT;
这会检查
exports
是否是对象,然后检查它是否不是null
(通过&& exports
)。似乎是一种合理的方法,尽管它当然特定于CommonJS module system(这是Node使用的方法)。