gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:16:33 25 4
gpt4 key购买 nike

当我创建一个新的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com