4

Rails 新手,所以请多多包涵……我今天在研究资产管道时正在查看清单文件(application.js),并且很好奇这些指令是如何//= require jquery被读取的。这是 Sprockets 在后台做的事情吗?如何?为什么必须先注释掉指令,然后加上等号?如果我取消注释指令并在我的浏览器中加载 application.js 文件,我将不再看到 jquery 库内容。只是好奇这是如何在后台工作的。

另外,当我添加自己的自定义 css 样式表时,我是在 application.css 清单文件中添加一个 require 指令,还是添加样式表链接,例如<link rel="stylesheet" type="text/css" href="mystyle.css">?还是我两者都做?我假设我不应该直接在清单文件中添加 css ...

谢谢!

4

2 回答 2

3

不知道你知道多少,所以会尽量详细解释。

Rails 将我们的资产(如图像、css、js 文件)存储在不同的位置,所以一切都井井有条,对我们 - 开发人员来说更好,可以使用。这就是所谓的Assed Pipeline。当 Rails 加载这些资源时,比如 css 文件,它会从我们所有的应用程序文件中创建一个大文件,以避免多次调用。Manifest 就像 Rails 的地图或规则,哪些文件要包含在那个大的 css 文件中,这*=就是告诉 Rails 究竟要包含什么(我认为它是 Rails 语法)。所以当你有这样的事情时:

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree . 

require_tree .告诉 Rails 从 javascripts 文件夹中获取所有文件,而//= require jquery其他人则将 Rails 引导到特殊情况- 资产,通常由您的 gem 使用(那些您从未保存在 javascripts/stylesheets 文件夹中的文件,所以//= require_tree .看不到它们)。

添加 on css 文件时,只需将其添加到样式表文件夹并require_tree通知 Rails 将其包含在大图中。但是 Rails 有一个很好的特性——脚手架。你用命令搭建你的对象,rails g scaffold UserRails 为你创建一切——视图、控制器、模型、测试(谁知道还有什么 :))。所以在这种情况下,你甚至不需要创建你的 css 文件,只需在其中插入 css 规则,Rails 就会找到它require_tree .

sass 文件有点不同:

如果你想使用多个 Sass 文件,你通常应该使用 Sass @import 规则而不是这些 Sprockets 指令。当使用 Sprockets 指令时,Sass 文件存在于它们自己的范围内,使得变量或 mixin 仅在它们被定义的文档中可用。

因此,如果您将使用 Bootstrap(可能会),那么了解这一点也很重要。

希望这可以帮助

于 2017-04-12T18:58:43.787 回答
1

如何?为什么必须先注释掉指令

因为这是 sprockets 指令。它在该文件中的任何 js/coffee 有机会运行之前执行。而且 css 根本不是“可运行”的代码。你如何使这种代码不产生任何错误?你评论一下。

...并添加等号?

将这些特殊指令与可能在该文件中的其他“常规”注释区分开来。

我假设我不应该直接在清单文件中添加 css ...

为什么不呢,继续。尽管出于代码组织的原因,您可能希望将任何自定义代码放在单独的文件中。但从技术上讲,这里没有问题。

另外,当我添加我自己的自定义 css 样式表时,我是否在 application.css 清单文件中添加了一个 require 指令

不需要,require_tree .会找到并包含您的文件。

还是我添加样式表链接,例如<link rel="stylesheet"type="text/css" href="mystyle.css">

不,不要那样做。

于 2017-04-12T19:03:49.997 回答