У меня есть один проект 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
заявления? Есть ли другие способы решить эту проблему с помощью эликсира?
Поскольку ответа нет, я должен сам найти решение, и вот оно.
В 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 достаточно умен, чтобы не компилировать и не конкатенировать этот файл снова.
Так я решил проблему в своем вопросе.
Других решений пока нет …