【发布时间】:2016-11-25 21:06:42
【问题描述】:
我是 Rails 新手,我对如何加载资源有点困惑。我可以让事情正常进行,但我想了解幕后真正发生的事情。
我一直在阅读文档,但有些内容我并不完全理解。
清单文件
首先让我感到困惑的是清单文件的使用。
例如,如果在我的 app/assets/javascripts/application.js 文件中有:
//= require_tree .
Rails 文档说:
告诉 Sprockets 递归地将所有 JavaScript 文件包含在 指定目录进入输出
我不清楚是哪个目录?应用程序/资产/javascripts/?
这是否意味着如果我在 app/assets/javascripts/ 中添加一个文件,它将被加载并提供服务?
如果我添加了需要添加文件 example.js 的 gem,我需要添加到清单文件中:
//= require example.js
但是,如果 //= require_tree 已经在 app/assets/javascripts/ 中加载和提供文件,那为什么还要这样做呢?好的,如果以后我添加更多需求,我可以指定顺序。但除此之外呢?
HTML 文件
然后将脚本包含在 application.html.erb 中
<%= javascript_include_tag ('application'), 'data-turbolinks-track' => true %>
我知道这会加载上面提到的 application.js 文件,因此会加载其中的各种 //= require。
有时需要将特定文件编写为:
<script src="js/example.js"></script>
这种情况不会是<script src="js/example.js"></script> 做与//= require example.js 完全相同的事情吗?
公共 VS 应用资产
我了解,如果我将 example.js 文件放在 public/assets 文件夹中,它将不会被编译而是单独提供。我为什么要这么做?如果文件在连接和编译时没有正确提供并且仅在分开提供时才有效,这样做是否合理?换句话说,如果我在 app/assest 中包含一个 .js 文件并且它在加载或破坏某些东西时遇到问题,是否值得尝试将其从那里删除并将其移动到 public/assets 或者这没有意义?
应用资产与供应商资产
在哪种情况下我应该将文件添加到供应商资产而不是应用资产?将它添加到一个地方或另一个地方有什么区别? 在我的供应商/资产/javascripts 中,我只有一个空的 .keep 文件。因此,应用程序/资产上没有清单文件之类的东西。那么这个文件夹中的文件是如何被引用的呢?
【问题讨论】:
标签: ruby-on-rails asset-pipeline