我有一个带有“Ruby on Rails”框架的CoffeeScript项目。现在我想使用“Laravel”框架而不是“Ruby on Rails”。
在“Ruby on Rails”中,有“Sprocket”资产管道管理库。使用“Sprocket”,我可以使用#= require
或#= require_tree
语句导入主coffeescript文件中的其他coffeescript文件,例如
#= 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
声明的对应方是什么?还有其他方法可以用Elixir解决这个问题吗?
答案 0 :(得分:3)
由于没有答案,我必须自己探索解决方案,这是一个解决方案。
在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文件中包含其他coffeescript文件,例如在Ruby on Rails的Sprocket中。
但是仍有一个问题是如何在多个目录中要求所有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非常聪明,无法再次编译和连接该文件。
这就是我在问题中解决问题的方式。