如何使用 Laravel 在主 CoffeeScript 中要求其他 CoffeeScripts 文件?

How to require other CoffeeScripts files in main CoffeeScript with Laravel?

我有一个使用 "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)

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

没有答案,只能自己摸索了,这里是

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

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

因此,您不需要像 Ruby 的 Sprocket 那样在 主 coffeescript 文件 中包含 其他 coffeescript 文件在 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 足够智能,不会再次编译和连接该文件。

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