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

我知道如何在NodeJS中创build模块(这很简单)。 但是,如果我想要在服务器端和客户端环境中都能够正常工作,那么是否可以实现?

假设你想创build一个Modeltypes(“class”)。 假设您有一个名为Lib.define()的类创build函数。 所以,你写这个:

 Lib.Model = Lib.define({ init: function() { // constructor... }, save: function() { // saves the model. } }); 

上面的代码会使Lib.Model成为一个表示可实例化types的对象。 但是,如何编写它,以便它也符合NodeJS? 如果你试图要求上面的文件( require('Model.js') ),它不会做任何事情,因为没有分配给export 。 但是,如果我这样做,那么我只是应该在客户端环境中有一个无用的export对象?

除此之外,是否还有其他方法可以执行此操作,只需简单地加载和parsingJS并在全局范围内工作,以便上面的代码将在全局variablesLib生成Model成员?

我现在正在考虑vm ,但是我不知道如何正确使用它。 我有一个文件/类加载器,可以像Dojo一样parsingpath并加载脚本。 我应该在客户端编写一些逻辑(放置脚本标签),而对于NodeJS,它只需读取文件内容和vm.runInThisContext(code) ?。

JSHint只是检测是否有exports符号,如果有的话添加到它。 他们的支票看起来像这样:

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

这将检查是否exports是一个对象,然后检查它不是null (通过&& exports )。 似乎是一个合理的方法,尽pipe它当然是特定于CommonJS模块系统 (这是Node所使用的)。