如何使JavaScript与客户端和服务器端兼容?
我知道如何在NodeJS中创建模块(这相当简单)。然而,如果我想做一些应该在服务器端和客户端环境中都能工作的东西,那么我们能做到这一点吗 假设您想要创建一个模型类型(“类”)。假设您有一个名为如何使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
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
)。这似乎是一种合理的方法,当然它是特定于(节点使用的)的