【问题标题】:Rails assets usage clarificationRails 资产使用说明
【发布时间】: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>

这种情况不会是&lt;script src="js/example.js"&gt;&lt;/script&gt; 做与//= require example.js 完全相同的事情吗?

公共 VS 应用资产

我了解,如果我将 example.js 文件放在 public/assets 文件夹中,它将不会被编译而是单独提供。我为什么要这么做?如果文件在连接和编译时没有正确提供并且仅在分开提供时才有效,这样做是否合理?换句话说,如果我在 app/assest 中包含一个 .js 文件并且它在加载或破坏某些东西时遇到问题,是否值得尝试将其从那里删除并将其移动到 public/assets 或者这没有意义?

应用资产与供应商资产

在哪种情况下我应该将文件添加到供应商资产而不是应用资产?将它添加到一个地方或另一个地方有什么区别? 在我的供应商/资产/javascripts 中,我只有一个空的 .keep 文件。因此,应用程序/资产上没有清单文件之类的东西。那么这个文件夹中的文件是如何被引用的呢?

【问题讨论】:

    标签: ruby-on-rails asset-pipeline


    【解决方案1】:

    对于带有路径参数的指令,您可以指定 逻辑路径或相对路径。相对路径以 ./ 和 参考文件相对于当前文件的位置。

    所以//= require_tree . 告诉 sprockets 加载 app/assets/javascripts/ 中的任何文件并将它们连接到 application.js。

    这种情况不会是&lt;script src="js/example.js"&gt;&lt;/script&gt; 做与 //= 完全相同的事情需要 example.js?

    没有。 Rails 在开发中将资产作为单独的文件提供,以便在发生错误时获得有意义的行号和文件引用。

    在生产中,它连接并缩小对性能很重要的资产。

    Sprockets 不会检查您的视图/布局中的脚本标签。所以前者会产生两个请求。

    我明白,如果我将 example.js 文件放在 public/assets 上 文件夹,它不会被编译,而是单独提供。我为什么要这样做 那个?

    公共目录位于服务器 Web 根目录下。由于那里的文件在没有太多干预的情况下提供,因此它是错误页面或需要具有静态名称而没有缓存破坏指纹的资产的好地方。

    在哪种情况下我应该将文件添加到供应商资产而不是应用程序 资产?将它添加到一个地方或有什么区别 另一个?

    /vendor/assets 是放置不是由您创建或不属于应用程序的资产的地方。两者都添加到链轮加载路径中,因此结果相同。它只是一个代码组织的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      相关资源
      最近更新 更多