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

Dun*_*nco 25 coffeescript requirejs curljs

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

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

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

感谢您的任何帮助,您可以提供.我真的在寻找可行的源代码示例.

Jas*_* L. 36

首先,如果你正在使用RequireJS,你将很容易从define函数返回多个"东西".RequireJS使用AMD(!NOT!CommonJS)格式"标准",它不包含用于导出"stuff"的module.exports对象,而是依赖于返回某些东西.

话虽如此,我并不完全确定你在寻找什么,但是使用RequireJS进行课程工作非常简单.像这样的东西:

define ['my/required/module'], (myModule) ->
    class MyOtherModule
        privateField = 0

        constructor: ->
        publicMethod: ->

    return MyOtherModule
Run Code Online (Sandbox Code Playgroud)

这可以在require/define函数中使用,就像任何其他脚本一样.举个例子:

require ['my/other/module'], (MyOtherModule) ->
    instance = new MyOtherModule()
Run Code Online (Sandbox Code Playgroud)

我们甚至可以用"扩展"来使用它

define ['my/other/module'], (MyOtherModule) ->
    class MyThirdModule extends MyOtherModule
        ...   
Run Code Online (Sandbox Code Playgroud)

希望这有帮助!

  • 考虑到CoffeeScript将如何自动返回上次执行的表达式,同意返回完全是多余的.但是,在大多数情况下,我仍然会把它放在那里,因为我认为这使得代码对于那些刚学习/仍在学习CoffeeScript(我的大多数团队)的人来说更具可读性. (20认同)
  • `return MyOtherModule`是多余的.简单地说"类MyOtherModule",如果它是范围中的最后一个东西(例如,类_block_之后没有其他内容),则重新启动它. (13认同)
  • 非常好的你.我一个人工作,所以我从未想过.:) (4认同)