javascript - 使用 coffeescript 进行多文件通信

标签 javascript coffeescript

当我创建一个新的 coffeescript 文件时,我无法从另一个文件访问已编译代码中的代码,因为它被包裹在某个函数范围内。例如:

CoffeeScript :

class ChatService
  constructor: (@io) ->

生成的 Javascript:

(function() {
  var ChatService;    
  ChatService = (function() {    
    function ChatService(io) {
      this.io = io;
    }    
    return ChatService;    
  })();    
}).call(this);

当尝试在另一个文件中调用 ChatService 时,它未定义。我如何使用 coffeescript 处理多个文件?

最佳答案

根据这是客户端代码还是服务器端代码,有两种略有不同的方法。

客户端:在这里,我们将跨文件可用的内容附加到全局命名空间 (window),如下所示:

class window.ChatService
  constructor: (@io) ->

然后,在另一个文件中,ChatServicewindow.ChatService 都将允许访问该类。


服务器端:这里我们必须使用exportsrequire。在 ChatService.coffee 文件中,您将拥有以下内容:

class exports.ChatService
  constructor: (@io) ->

然后,要从另一个文件中获取它,您可以使用:

ChatService = require('ChatService.coffee').ChatService

注意:如果您从 ChatService.coffee 获取多个类,这是 CoffeeScript 的 dict 解包真正发挥作用的地方,例如:

{ChatService, OtherService} = require('ChatService.coffee')

两者:基本上,我们根据所处的环境来选择是运行服务器端代码还是客户端代码。一种常见的做法是:

class ChatService
  constructor: (@io) ->

if typeof module != "undefined" && module.exports
  #On a server
  exports.ChatService = ChatService
else
  #On a client
  window.ChatService = ChatService

获取方式:

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

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

如果你要在这个文件中定义很多类,像这样定义它们可能会更容易:

self = {}

class self.ChatService

然后在服务器上附加它们,如 module.exports = self 和客户端上的 _.extend(window, self)(替换 _.extend 与另一个 extend 适当的函数)。

关于javascript - 使用 coffeescript 进行多文件通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9287510/

相关文章:

javascript - 使用纯Javascript Ajax从本地获取json数据

javascript - 将字符串替换为可选的尾随字符

javascript - 在页面上的特定点开始滚动指示器

javascript - CKEditor 中的 keyup 事件

javascript - 不一致的 jQueryeach() 行为和无法解释的修复

regex - Coffeescript - 替换字符串

javascript - handlebar js - 如果和数据同时在对象内不起作用

javascript - js代码删除字符串中数字之间的空格

javascript - 检查 coffeescript 中的 ajax 请求是否失败

node.js - 如何在 Windows 上使用 Cygwin 将 coffee-script 模块包含在 Node 中