Организация нескольких файлов CoffeeScript - PullRequest
7 голосов
/ 07 января 2012

Я работаю над реализацией веб-сервиса, в котором мы пишем наш интерфейсный код на CoffeeScript.Проблема, на которую я наткнулся, заключается в том, что пока проект расширяется, его функциональность должна быть разделена на разные файлы.Что мне действительно нужно, так это простая структура, где в файле utils.coffee у меня будут общие функции, необходимые для каждой страницы, и в каждом отдельном файле у меня будет page_foo.coffee page_bar.coffee определенных функций.Как я могу правильно структурировать его, чтобы я также удостоверился, что utils.coffee загружается первым и доступен всем?

Ответы [ 4 ]

7 голосов
/ 26 апреля 2012

С CoffeeToaster у вас есть возможность включать файлы, которые вам понадобятся, в их верхнюю часть, гарантируя, что ваш окончательный файл ".js" (который будет также объединять все ваши файлы CoffeeScript) будет иметь все в надлежащем виде заказ, для использования внутри браузера.

Посмотрите документы:
http://github.com/serpentem/coffee-toaster

Он также поставляется с системой упаковки, которая при включении будет использовать иерархию вашей папки в качестве объявлений пространств имен для ваших классов, если вы этого хотите, тогда вы можете расширять классы из нескольких файлов, выполнять импорт и сыновье, например:

#<< another/package/myclass
class SomeClass extends another.package.MyClass

Конфигурация сборки чрезвычайно минималистична:

# => SRC FOLDER
toast 'src_folder'
    # => VENDORS (optional)
    # vendors: ['vendors/x.js', 'vendors/y.js', ... ]

    # => OPTIONS (optional, default values listed)
    # bare: false
    # packaging: true
    # expose: ''
    # minify: false

    # => HTTPFOLDER (optional), RELEASE / DEBUG (required)
    httpfolder: 'js'
    release: 'www/js/app.js'
    debug: 'www/js/app-debug.js'

Существует даже опция отладки, которая компилирует файлы по отдельности для упрощения процессов отладки и другие полезные функции.

5 голосов
/ 09 января 2012

Порядок выполнения соблюдается в браузерах, поэтому сначала включите utils.js.

Инструмент, подобный CodeKit (http://incident57.com/codekit/) может компилировать и минимизировать + объединять все ваши .coffee файлы в один .js,это легко сделать и с помощью сценария оболочки.

Если ваше приложение действительно большое, прочитайте require.js и Асинхронная загрузка модулей . Это позволит вамочень легко управлять зависимостями и загружать только то, что необходимо:

# page_foo.coffee
define ['lib/utils'], ($) ->
    // code that uses 'utils'
3 голосов
/ 02 мая 2012

Вы можете проверить, как это делается в проекте gae-init (Отказ от ответственности: я создатель).

Основная идея заключается в том, что у вас есть все *.coffee файлы в одном конкретном каталоге, а затем сценарий сборки, который компилирует все файлы и помещает их в правильные пути.

Поскольку вы хотели бы иметь возможность легко отлаживать во время разработки, у сценария сборки должна быть возможность просто скомпилировать их, а также возможность комбинировать и минимизировать их.

2 голосов
/ 11 января 2012

Я пишу задачу Cake для объединения и компиляции файлов в заданной последовательности, например

task 'build', 'join and compile *.coffee files', ->
  exec "coffee -j #{outJS}.js -c #{strFiles}", exerr

, где outJS - это имя файла, в котором я хочу скомпилированный JavaScript, и strFilesэто строка имен файлов

Кроме того, вы можете добавлять задачи для минимизации скомпилированного кода, используя YUICompressor или ваш любимый инструмент.А во время разработки можно также автоматизировать объединение, компиляцию

task 'watch', 'watch and compile changes in source dir', ->
  watch = exec "coffee -j #{outJS}.js -cw #{strFiles}"
  watch.stdout.on 'data', (data)-> process.stdout.write data 

Взгляните на эту суть

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...