我们希望使用Coffeescript开发一个浏览器(仅限客户端)库,特别是,除了纯函数之外,我们倾向于使用Coffeescript的“类”功能。库将相对较大,因此我们想要开始使用定义良好的模块模式,但不是我们想要每个coffeescript“类”的单个咖啡文件。我们不想动态编译咖啡文件,而是作为特定的构建步骤,并且不希望将所有输出的JS连接成一个文件。作为最终要求,我们将使用像Jasmine这样的测试。
有没有人知道以这种方式开发的一个很好的示例库,使用Coffeescript,如RequireJS,CurlJS,Browserify等?我看过Github,有一些例子,但我看不出任何具体的需求。
我试过Coffee-Toaster,因为它似乎有一些承诺,可以很容易地定义依赖关系等,但它无法处理Windows路径(旧的\ vs /),所以放弃了,主要是因为它似乎有点“光明”的一面 - 像RequireJS这样的东西似乎有更好的社区支持。
感谢您提供的任何帮助。我正在寻找可行的源代码示例。
答案 0 :(得分:36)
首先,如果您正在使用RequireJS,那么您将很容易从define函数返回多个“事物”。 RequireJS使用AMD(!NOT!CommonJS)格式“标准”,它不包含用于导出“stuff”的module.exports对象,而是依赖于返回内容。
话虽如此,我并不完全确定你在寻找什么,但是使用RequireJS课程很容易。像这样:
define ['my/required/module'], (myModule) ->
class MyOtherModule
privateField = 0
constructor: ->
publicMethod: ->
return MyOtherModule
这可以在require / define函数中使用,就像任何其他脚本一样。举个例子:
require ['my/other/module'], (MyOtherModule) ->
instance = new MyOtherModule()
我们甚至可以将它用于“extends”
define ['my/other/module'], (MyOtherModule) ->
class MyThirdModule extends MyOtherModule
...
希望这有帮助!
答案 1 :(得分:3)
我也在使用咖啡烤面包机,最近我发现了很少的帖子 我认为值得一读,也许我们可以解决这个问题:
http://blog.toastymofo.net/2012/04/coffeescript-requirejs-and-you-part-one.html
http://24ways.org/2012/think-first-code-later/
和http://jamjs.org看起来很酷!
答案 2 :(得分:1)
我还没有实际使用过这种技术,但是:
唯一需要记住的是,CoffeeScript语句在函数的最后一个时也是返回值。所以,基本上,以下代码:
define [], () ->
class Main
转换为:
define([], function() {
var Main;
return Main = (function() {
function Main() {}
return Main;
})();
});
这应该按预期工作(我认为没有理由不基于编译的JavaScript)。
为了管理代码库,我相信CS plugin应该派上用场。它由James Burke自己维护,并支持构建CoffeeScript项目,就像构建JavaScript项目一样。