使用的CoffeeScript类和RequireJS(或Curljs或类似的),用于客户端的浏览器库

2019-07-30 07:21发布

我们想开发一个浏览器(仅限客户端)使用的CoffeeScript库,特别是,我们倾向于使用“类”的能力CoffeeScript中的相当多,除了纯粹的功能。 图书馆将是比较大的,所以我们要开始了用一个定义良好的模块模式,而不是我们希望每一个CoffeeScript的“类”单咖啡的文件点。 我们不希望编译在飞行咖啡文件,而是作为一个具体的构建步骤,宁可不用所有的输出JS Concat的到一个文件中。 作为最后一个要求,我们将使用类似茉莉花进行测试。

有谁知道这种方式开发的一个很好的例子库,使用CoffeeScript的与作为RequireJS,CurlJS,Browserify等这样的东西? 我已经看过在Github上,也有一些例子,但我看不出具体到我需要什么。

我试过咖啡烤面包机 ,因为它似乎持有一些承诺,在作出简单定义依赖关系等,但它未能及时处理的Windows路径(老\ VS /),所以放弃了那个,主要是因为它似乎是对“光”的一面位 - 像RequireJS似乎有它背后的一个更好的社会的支持。

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

Answer 1:

首先,如果你使用RequireJS你将有一个不容易的时间从定义函数返回多个“东西”。 RequireJS采用了AMD(!不!CommonJS的)格式“标准”,其中不包含module.exports对象导出“东西”,而是依赖于一些回报。

随着中说,我不完全相信你正在寻找在这里,但有一类工作,RequireJS是很容易的。 事情是这样的:

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

        constructor: ->
        publicMethod: ->

    return MyOtherModule

这可以就像任何其他脚本需要/定义函数中使用。 就拿这个例子:

require ['my/other/module'], (MyOtherModule) ->
    instance = new MyOtherModule()

与“扩展”我们甚至可以用它

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

希望这有助于!



Answer 2:

我使用的咖啡烤面包机过了,我发现几个帖子最近。
我认为这是值得阅读,也许我们可以工作了:

http://blog.toastymofo.net/2012/04/coffeescript-requirejs-and-you-part-one.html
http://24ways.org/2012/think-first-code-later/

和http://jamjs.org看起来很酷!



Answer 3:

我还没有实际使用这种技术还没有,但是:

要记住这里的唯一的事情就是CoffeeScript的语句也返回值时,它们会在最后一个函数。 所以,基本上,下面的代码:

define [], () ->
  class Main

翻译为:

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

    function Main() {}

    return Main;

  })();
});

和预期(我不明白为什么它会不是基于JavaScript的编译)应该工作。

对于管理的代码库,我相信CS插件应该派上用场。 它是由詹姆斯·伯克自己维护,并支持CoffeeScript中的建设项目,以同样的方式的JavaScript项目的构建。



文章来源: Example of using Coffeescript classes and RequireJS (or Curljs or similar) for client side browser library