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

新手上路,请多包涵

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

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

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

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

原文由 Simon Cave 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 511
2 个回答

如果你想编写一个可以同时用于客户端和服务器端的模块,我有一篇关于快速简便方法的简短博客文章: _为 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 的 gemini

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

原文由 Caolan 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

原文由 broesch 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏