针对浏览器和NodeJS的单个函数模块的语法

Syntax for a single function module targeting the browser and NodeJS

本文关键字:单个 函数 模块 语法 NodeJS 浏览器      更新时间:2023-09-26

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

window.myModule = function(){ };

对于node,我将其分配给module.exports:

module.exports = function(){ };

处理所有场景最干净的语法是什么?我现在的代码很恶心:

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

我见过这样的例子,但是导出是一个对象。

这个答案很接近,但是我想直接导出到模块(我不想要额外的限定符)。

改编自与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上的引用。

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