Rails – 了解application.js和application.css

铁路新手。 只是试图理解\ assests目录中的这两个文件。

例如,application.js文件包含如下行:

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

我理解require_tree . 只需在当前目录中添加所有JS文件。 通过上下文,我可以说require jquery添加jQuery库。 但它从哪里获得这些jQuery库? 我没有在我的资产文件夹中看到任何jquery.js文件 – 或者在我的整个应用程序中直接看到这个问题?

同样,我正在按照一些说明安装twitter bootstrap( http://rubydoc.info/gems/bootstrap-sass-rails/2.3.2.0/frames )。 将我的gem添加到Gemfile之后,我需要将//= require bootstrap添加到application.js文件中,并将@ @import 'bootstrap'到我的application.css中,现在它神奇地起作用! 为什么!? 我无法在任何地方找到这些文件

谢谢!

要理解它,您必须查看Sprockets ,它用于编译和提供Web资产。

你可以使用gem which找到这些文件。 以下是bootstrap-sass的示例:

 ~ gem which bootstrap-sass /Users/andr/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/bootstrap-sass-2.3.0.1/lib/bootstrap-sass.rb 

@ @import 'bootstrap'的解释: https : //github.com/thomas-mcdonald/bootstrap-sass#css并且有一个未解决的问题 。

application.css和application.js不是常规的css和js文件(它们可能是,但它们有不同的用途

两者都是清单文件,它们告诉资产管道以及js的链轮

所以,正如Michael Durrant的回答所正确指出的那样, http://guides.rubyonrails.org/asset_pipeline.html#manifest-files-and-directives将是正确的地方

但根据你的其他问题,你似乎错过了一个非常重要的难题

Rails主要用于gem。 Gems是ruby代码的一部分,您可以通过bundler将其添加到rails应用程序中

当你添加像引导gem这样的gem时,它会被安装(默认安装在你安装了ruby的gems库中 – 比如Ruby193 \ lib \ ruby​​ \ gems \ 1.9.1 \ gems)

如果你去那里寻找bootstrap gem,你会发现应用程序中包含的css和js文件,以及你在清单文件中包含的jquery和jquery_ujs

由于gem与铁轨一起安装,铁轨不介意文件的位置(只要它知道它们在哪里)。

所以清单文件告诉rails“嘿,按照这个特定的顺序包含这些文件”这就是为什么你可以包含你写的资产文件夹和文件包含在gem中的文件

如果您没有在清单中包含文件但仍然安装相当于编写css或js文件的gem,请将其放在某个文件夹中,而不是告诉rails它是否存在。 当您通过清单文件告诉rails它的位置时,它会将其包含在资产编译过程中,您可以定期访问它。

或者,您不必将资产管道用于资产

你可以包含常规的css和js文件

   

并且只是在某个地方托管您的文件并将其指向文件,但资产管道有许多优点,当您了解它时它确实让您的生活更轻松

我认为它可以从系统上安装的gem中获取它们,并通过Gemfile包含在这个项目中。

您可以在http://guides.rubyonrails.org/asset_pipeline.html#manifest-files-and-directives上学习

这是铁路魔术! 因此,您无法在自己的项目目录中看到这些文件。 如果你真的很好奇,你可以在gem的github页面上查看gem的代码https://github.com/twbs/bootstrap

另外,如果你真的想要更改gem中的某些内容,你可以将代码分叉到你自己的github中,更改本地分支上的内容,然后指定你自己的github作为gem文件中gem的来源,例如……

gem’twitter-bootstrap’,: git =>’git@github.com:my_github / twitter_bootstrap.git’

但是,如果你真的对rails很新,你可能不想尝试;)