25

我们想使用 Coffeescript 开发一个浏览器(仅限客户端)库,特别是,除了纯函数之外,我们更倾向于使用 Coffeescript 的“类”功能。该库将相对较大,因此我们希望从使用定义明确的模块模式开始,但不是到我们希望每个咖啡脚本“类”都有一个咖啡文件的地步。我们不想即时编译咖啡文件,而是作为特定的构建步骤,并且希望不必将所有输出的 JS 合并到一个文件中。作为最终要求,我们将使用 Jasmine 之类的东西进行测试。

有谁知道以这种方式开发的一个很好的示例库,将 Coffeescript 与 RequireJS、CurlJS、Browserify 等结合使用?我看过 Github,有一些例子,但我看不到任何特定于我需求的东西。

我尝试了Coffee-Toaster,因为它似乎在简化定义依赖项等方面有一些承诺,但它无法处理 Windows 路径(旧的 \ vs /),所以放弃了,主要是因为它似乎是有点“轻”的一面——像 RequireJS 这样的东西似乎背后有更好的社区支持。

感谢您的任何帮助,您可以提供。如果可能的话,我真的在寻找有效的源代码示例。

4

3 回答 3

37

首先,如果您使用的是 RequireJS,您将很难从定义函数中返回多个“事物”。RequireJS 使用 AMD(!NOT!CommonJS)格式的“标准”,它不包含用于导出“东西”的 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()

我们甚至可以将它与“扩展”一起使用

define ['my/other/module'], (MyOtherModule) ->
    class MyThirdModule extends MyOtherModule
        ...   

希望这会有所帮助!

于 2012-07-19T18:56:41.577 回答
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看起来很酷!

于 2012-12-07T02:14:13.813 回答
1

I haven't actually used this technique yet, but:

The only thing to keep in mind here is that CoffeeScript statements are also return values when they are last in a function. So, basically, the following code:

define [], () ->
  class Main

translates to:

define([], function() {
  var Main;
  return Main = (function() {

    function Main() {}

    return Main;

  })();
});

and that should work as expected (I see no reason why it wouldn't based on the compiled JavaScript).

For managing code base, I believe the CS plugin should come in handy. It's maintained by James Burke himself, and supports building of CoffeeScript projects the same way JavaScript projects are built.

于 2012-10-21T17:26:08.070 回答