Как потребовать другие файлы CoffeeScripts в основном CoffeeScript с Laravel?

У меня есть один проект CoffeeScript с фреймворком Ruby on Rails. Теперь я хочу использовать фреймворк Laravel вместо Ruby on Rails.

В «Ruby on Rails» есть библиотека управления конвейером активов «Sprocket». С помощью «Sprocket» я могу импортировать другие файлы coffeescript в основной файл coffeescript с оператором #= require или #= require_tree, например.

#= require views/view
#= require_tree ./views

#= require_tree ./templates

init = ->
  document.removeEventListener 'DOMContentLoaded', init, false

  if document.body
    app.init()
  else
    setTimeout(init, 42)

Какие есть аналоги в Laravel для этих операторов #= require и #= require_tree? Есть ли другие способы решить эту проблему с помощью Эликсира?


person Steve.NayLinAung    schedule 05.06.2015    source источник
comment
Coffescript не поддерживает собственный импорт. Вы можете попробовать использовать Gulp для объединения файлов перед их компиляцией. github.com/wearefractal/gulp-concat   -  person Jeremy Thille    schedule 08.06.2015


Ответы (1)


Поскольку ответа нет, я должен сам найти решение, и вот оно.

В версии Laravel-elixir (2.3.6) есть функция конкатенации для coffeescript. Вы должны хранить coffeescript файлов в каталоге resources/assets/coffee. Затем следующий скрипт в gulpfile.js сгенерирует один app.js, который скомпилирует и объединит все кофейные скрипты в указанном параметре массива.

elixir(function(mix) {
   mix.coffee(['app.coffee', 'collection.coffee']);
});

Таким образом, вам не нужно включать другие файлы coffeescript в основной файл coffeescript, как в Sprocket of Ruby on Rails.

Но все еще есть одна проблема: как потребовать все файлы coffeescript в более чем одном каталоге. Эти файлы coffeescript также должны быть в порядке, чтобы их зависимости не нарушались. Затруднительно записывать каждое имя файла coffeescript для того, чтобы оно требовалось. Следующий скрипт может прекрасно решить эту проблему.

mix.coffee([
    'lib/license.coffee',
    'lib/*.coffee',

    'app/app.coffee',
    'app/config.coffee',
    'app/*.coffee',

    'collections/collection.coffee',
    'collections/*.coffee',

    'models/model.coffee',
    'models/*.coffee',

    'views/view.coffee',
    'views/*.coffee',

    'templates/*.coffee',

    'application.coffee'
]);

mix.scripts(null, 'public/js/vendor.js', 'resources/assets/coffee/vendor');

Вы можете потребовать все файлы coffeescript в каталоге со знаком * (звездочка), например, 'models/*.coffee'.

Вы также можете указать файл, который требуется сначала, прежде чем запрашивать все файлы в каталоге, по их имени файла, например 'models/model.coffee'. Laravel-elixir достаточно умен, чтобы не компилировать и не объединять этот файл снова.

Вот так я решил проблему в своем вопросе.

person Steve.NayLinAung    schedule 17.06.2015