2017-04-12 32 views
2

新的Rails让我忍无可忍......今天我在研究资产管道时正在查看清单文件(application.js),并且很好奇如何读取//= require jquery等指令。这是什么Sprockets在背景中做的?怎么样?为什么必须先将该指令注释掉,并添加等号?如果我取消注释指令并在我的浏览器中加载application.js文件,我不再看到jQuery库的内容。只是好奇这是如何在后台工作。另外,当我添加自己的自定义css样式表时,是否在application.css清单文件中添加require指令,还是添加样式表链接,如<link rel="stylesheet" type="text/css" href="mystyle.css">?或者我都这样做?我假设我不应该直接在清单文件中添加css ...在使用Rails时,Sprockets指令是如何在清单文件中读取的?

谢谢!

回答

1

不知道你知道多少,所以会试着详细解释。

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

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

require_tree .告诉Rails从JavaScript的文件夹抢的所有文件,而//= require jquery和其他指导的Rails 特殊情况 - 资产,通常是由你的宝石使用(这些文件你永远不要保存在你的javascript/stylesheets文件夹中,所以//= require_tree .不能看到它们)。

当你添加你的css文件时,你只需将它添加到样式表文件夹中,require_tree通知Rails将它包含在大图中。但Rails有一个很好的功能 - 脚手架。你用命令rails g scaffold User命令你的对象,Rails为你创建了一切 - 视图,控制器,模型,测试(以及谁知道还有什么:))。因此,在这种情况下,你甚至都不需要建立你的CSS文件,只需插入CSS规则把它和Rails会发现它因require_tree .

有点不同的故事与上海社会科学院文件:

如果你想要使用多个Sass文件,您通常应该使用Sass @import规则而不是这些Sprockets指令。当使用 链轮指令,存在萨斯文件自己的范围之内,使得 变量或混入只有他们在被定义 文档中可用。

所以,如果你要使用引导(可能会),这是重要的是要知道。

希望这有助于

+0

@JD,谢谢你的回答和关于Sass的提示,否则不会知道! –

+0

@克莱格内斯,谢谢!这真是一件愉快的事情:) –

1

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

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

...等号加了吗?

告诉这些特殊指令除了其他的“常规”注释外,可能在该文件中。

我假设我不应该在清单文件里面直接添加CSS ...

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

而且,当我添加自己的自定义CSS样式表,做我在application.css清单文件

无需添加需要的指令,require_tree .会发现,包括您的文件。

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

不,不要那样做。

+0

好评如潮......悲伤无法自己实现...... –

+0

谢谢@SergioTulentsev!这绝对有助于解决问题 –

相关问题