2

我有一个带有“Ruby on Rails”框架的 CoffeeScript 项目。现在我想使用“Laravel”框架而不是“Ruby on Rails”。

在“Ruby on Rails”中,有“Sprocket”资产管道管理库。#= require使用“Sprocket”,我可以使用or语句在主咖啡脚本文件中导入其他咖啡脚本文件,#= 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)

#= require这些和#= require_tree陈述在 Laravel 上的对应物是什么?有没有其他方法可以用 Elixir 解决这个问题?

4

1 回答 1

3

由于没有答案,我必须自己探索解决方案,这里就是一个。

Laravel-elixir版本 (2.3.6) 中,有一个coffeescript. 您必须将coffeescript文件存储在resources/assets/coffee目录中。然后,下面的脚本gulpfile.js将生成一个app.js编译并连接提供的数组参数中的所有咖啡脚本的单个脚本。

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

因此,您不需要像在 Ruby on Rails 的 Sprocket 中那样在主咖啡脚本文件中包含其他咖啡脚本文件。

但是仍然存在一个问题,即如何要求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');

您可以要求目录中带有 *(asterisk) 符号的所有咖啡脚本文件'models/*.coffee'

您还可以通过文件名指定在需要目录中的所有文件之前首先需要的文件'models/model.coffee'。Laravel-elixir 足够智能,不会再次编译和连接该文件。

这就是我解决问题的方式。

于 2015-06-17T09:19:14.967 回答