Подтвердить что ты не робот

Пример использования классов Coffeescript и RequireJS (или Curljs или аналогичных) для библиотеки браузера на стороне клиента

Мы хотим разработать библиотеку браузера (только на стороне клиента), используя Coffeescript, и, в частности, мы склонны использовать "класс" возможности Coffeescript совсем немного, в дополнение к чистым функциям. Библиотека будет относительно большой, поэтому мы хотим начать с использования четко определенного шаблона модуля, но не до такой степени, что нам нужен один файл кофе для каждого "класса" coffeescript. Мы не хотим компилировать файлы кофе "на лету", а скорее как конкретный шаг сборки, и предпочли бы не консулировать все выведенные JS в один файл. В качестве окончательного требования мы будем использовать что-то вроде Jasmine для тестирования.

Кто-нибудь знает о хорошей библиотеке примеров, разработанной таким образом, используя Coffeescript с чем-то вроде RequireJS, CurlJS, Browserify и т.д.? Я посмотрел на Github, и есть несколько примеров, но я не мог видеть ничего конкретного в моих потребностях.

Я попробовал Coffee-Toaster, поскольку, похоже, он обещает упростить определение зависимостей и т.д., но он не справился с путями Windows (старый\vs/), поэтому отказался от этого, главным образом потому, что он был немного на стороне "света" - что-то вроде RequireJS, казалось бы, намного лучше поддерживало бы сообщество.

Спасибо за любую помощь, которую вы можете предоставить. Я действительно ищу примеры примеров исходного кода, если это возможно.

4b9b3361

Ответ 1

Во-первых, если вы используете RequireJS, у вас будет непростое время, возвращая несколько "вещей" из функции определения. RequireJS использует "стандарты стандарта AMD (! NOT! CommonJS)", который не содержит объект module.exports для экспорта "материала", но вместо этого полагается на что-то возвратить.

Сказав это, я не совсем уверен, что вы ищете здесь, но иметь классную работу с RequireJS довольно легко. Что-то вроде этого:

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

        constructor: ->
        publicMethod: ->

    return MyOtherModule

Это можно использовать в функции require/define, как и любой другой script. Возьмите этот пример:

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

Мы можем даже использовать его с расширением

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

Надеюсь, это поможет!

Ответ 3

Я еще не использовал эту технику, но:

Единственное, о чем нужно помнить, это то, что выражения CoffeeScript также являются возвращаемыми значениями, когда они являются последними в функции. Итак, в основном, следующий код:

define [], () ->
  class Main

переводит на:

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

    function Main() {}

    return Main;

  })();
});

и это должно работать как ожидалось (я не вижу причин, почему он не основывался на скомпилированном JavaScript).

Для управления базой кода, я считаю, что плагин CS должен пригодиться. Он поддерживается самим Джеймсом Берком и поддерживает создание проектов CoffeeScript так же, как и проекты JavaScript.