Как требовать другие файлы 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 заявления? Есть ли другие способы решить эту проблему с помощью эликсира?

2

Решение

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

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

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

Таким образом, вам не нужно включать другие файлы 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 достаточно умен, чтобы не компилировать и не конкатенировать этот файл снова.

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

3

Другие решения

Других решений пока нет …