针对浏览器和NodeJS的单个功能模块的语法

时间:2013-06-06 15:59:46

标签: javascript node.js browser module

如果我正在为浏览器编写JavaScript模块,我会将其分配给window

window.myModule = function(){ };

对于节点,我将其分配给module.exports

module.exports = function(){ };

处理所有方案的最简洁的语法是什么?我目前的代码非常粗略:

(function(container, containerKey){
    container[containerKey] = function(){ };
})(module ? module : window, module ? 'exports' : 'myModule');

I've seen examples like this,但导出是一个对象。

This answer已关闭,但我想直接导出到模块(我不想要额外的限定符)。

1 个答案:

答案 0 :(得分:0)

改编自Multiple Files communication with coffeescript

基本上,我们根据我们所处的环境选择是运行服务器端代码还是客户端代码。这是最常用的方法:

if(typeof module !== "undefined" && module.exports) {
  //On a server
  module.exports = ChatService;
} else {
  //On a client
  window.ChatService = ChatService;
}

获得它:

if(typeof module !== "undefined" && module.exports) {
  //On a server
  ChatService = require("ChatService.coffee");
} else {
  //On a client
  ChatService = window.ChatService;
}

可以跳过第二个块的else子句,因为ChatService已经引用了附加到window的引用。

请注意,您的当前代码将在客户端上因ReferenceError而崩溃,除非恰好在某处声明了module