客户端浏览器库使用Coffeescript类和RequireJS(或Curljs或类似)的示例

时间:2012-07-09 06:07:20

标签: coffeescript requirejs curljs

我们希望使用Coffeescript开发一个浏览器(仅限客户端)库,特别是,除了纯函数之外,我们倾向于使用Coffeescript的“类”功能。库将相对较大,因此我们想要开始使用定义良好的模块模式,但不是我们想要每个coffeescript“类”的单个咖啡文件。我们不想动态编译咖啡文件,而是作为特定的构建步骤,并且不希望将所有输​​出的JS连接成一个文件。作为最终要求,我们将使用像Jasmine这样的测试。

有没有人知道以这种方式开发的一个很好的示例库,使用Coffeescript,如RequireJS,CurlJS,Browserify等?我看过Github,有一些例子,但我看不出任何具体的需求。

我试过Coffee-Toaster,因为它似乎有一些承诺,可以很容易地定义依赖关系等,但它无法处理Windows路径(旧的\ vs /),所以放弃了,主要是因为它似乎有点“光明”的一面 - 像RequireJS这样的东西似乎有更好的社区支持。

感谢您提供的任何帮助。我正在寻找可行的源代码示例。

3 个答案:

答案 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项目一样。