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

2022-08-30 00:27:37

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

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

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

我也尝试过使用JS。类以获得更严格的OO模型,但我放弃了,因为我不知道如何让提供的JavaScript文件与require()一起使用。我在这里错过了什么吗?


答案 1

如果你想写一个可以同时使用客户端和服务器端的模块,我有一篇关于快速简便方法的简短博客文章:为Node.js和浏览器编写,基本上如下(其中与相同):thiswindow

(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的简单网络协议从另一台计算机调用它。


答案 2

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();