我如何在Node.js和浏览器之间共享代码?

我正在用一个JavaScript客户端(在浏览器中运行)和一个Node.js服务器创建一个小应用程序,使用WebSocket进行通信。

我想分享客户端和服务器之间的代码。 我刚刚开始使用Node.js,至少可以说,我对现代JavaScript的了解有点生疏。 所以我仍然对CommonJS require()函数有所了解。 如果我使用'export'对象创建我的包,那么我看不到我如何在浏览器中使用相同的JavaScript文件。

我想要创建一组方法和两端使用的类,以便于编码和解码消息以及其他镜像任务。 但是,Node.js / CommonJS打包系统似乎无法创建可在两侧使用的JavaScript文件。

我也尝试使用JS.Class来获得更紧密的OO模型,但是我放弃了,因为我无法弄清楚如何让提供的JavaScript文件与require()一起工作。 我在这里错过了什么吗?


如果你想编写既可以采用客户端和服务器端的模块,我有一个快速简便的方法很短的博客文章:写作的Node.js和浏览器,实质上包含以下(其中, this是一样的window ):

(function(exports){

    // Your code goes here

   exports.test = function(){
        return 'hello world'
    };

})(typeof exports === 'undefined'? this['mymodule']={}: exports);

另外还有一些项目旨在在客户端实现Node.js API,例如Marak的双子座。

您可能也对DNode感兴趣,它允许您公开一个JavaScript函数,以便可以使用简单的基于JSON的网络协议从另一台机器调用它。


Epeli在这里http://epeli.github.com/piler/有一个很好的解决方案,即使没有库,也可以将它放在一个名为share.js的文件中

(function(exports){

  exports.test = function(){
       return 'This is a function from shared module';
  };

}(typeof exports === 'undefined' ? this.share = {} : exports));

在服务器端只需使用:

var share = require('./share.js');

share.test();

而在客户端只需加载js文件然后使用

share.test();

不要忘记,JavaScript函数的字符串表示代表该函数的源代码。 你可以简单地用封装的方式编写你的函数和构造函数,以便它们可以被toString()函数和发送给客户端。

另一种方法是使用构建系统,将通用代码放在单独的文件中,然后将它们包含在服务器和客户端脚本中。 我通过WebSockets使用这种方法进行简单的客户端/服务器游戏,其中服务器和客户端运行基本相同的游戏循环,并且客户端每隔一个时钟周期与服务器同步以确保没有人作弊。

我的游戏构建系统是一个简单的Bash脚本,它通过C预处理器运行这些文件,然后通过sed来清理一些垃圾cpp留下的垃圾,所以我可以使用所有正常的预处理器东西,如#include,#define,#ifdef等等

链接地址: http://www.djcxy.com/p/67103.html

上一篇: How can I share code between Node.js and the browser?

下一篇: Database resiliency