Rails 3.1: vendor/assets目录下的javascripts无法正常提供



我已经在几个目录中组织了我的javascript文件,我发现了以下奇怪的行为。给定以下树:

+ app
  + assets
    + javascripts
      + common
      + public
        + common
        + home
          - home.js

home.js看起来像这样:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_directory ../../jquery_plugins
//= require_directory ../../common
//= require_directory ../common
//= require_self

现在的诀窍在于jquery_plugins目录。我把它放在vendor/assets/javascripts(这是包含在资产加载路径,当我检查Rails.application.config.assets.paths)。当我这样做时,我得到错误:require_tree argument must be a directory。当我把目录移到app/assets/javascripts时,一切都工作了。

有谁知道我做错了什么吗?还是这是个bug?

您可以将清单文件添加到您试图使用以下内容提供服务的目录中vendor/assets/javascripts/jquery_plugins/manifest.js

//= require_directory .

并通过

app/assets/javascripts/application.js中要求它
//= require jquery_plugins/manifest

编辑(更简单的方式)

感谢@LeEnno为这

你可以把所有与库相关的文件放在一个以库命名的文件夹中,例如vendor/assets/javascripts/bootstrap,在同一个文件夹中添加一个index.js,它将作为你的清单,Rails将自动拾取它

如果在

app/assets/javascripts/application.js

添加

//= require bootstrap

那么容易! !
链接到Rails资源管道指南

我也遇到了同样的问题。我仍然不确定这是一个bug还是故意的行为,但似乎Rails.application.config.assets.paths只适用于单个文件,即require jquery等。显然,资产加载路径只是用于返回单个require的最佳匹配,而不是用于require_directoryrequire_tree

在我的例子中,要从vendor/assets/javascripts加载所有文件,我必须向app/assets/javascripts/application.js添加以下内容:

//= require_tree ../../../vendor/assets/javascripts/.

在你的情况下,像这样的东西应该工作:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_directory ../../../../../vendor/assets/javascripts/jquery_plugins
//= require_directory ../../common
//= require_directory ../common
//= require_self

似乎你总是必须使用从文件的相对路径,你调用require_directoryrequire_tree

此外,我发现关于js资产结构的讨论很有帮助:Rails 3.1资产管道和手动排序的Javascript需要

最新更新