11

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

例如,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 中,现在它神奇地工作了!!!为什么!?我在任何地方都找不到这些文件

谢谢!

4

4 回答 4

16

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

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

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

但根据您的其他问题,您似乎错过了一个非常关键的难题

Rails 主要用于 gems。Gems 是一段 ruby​​ 代码,你可以告诉它通过 bundler 添加到你的 Rails 应用程序中

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

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

由于 gems 安装在 rails 旁边,rails 不介意文件在哪里(只要它知道它们在哪里)。

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

如果你没有在 manifest 中包含文件但仍然安装 gem 相当于编写一个 css 或 js 文件,将它放在某个文件夹中并且不告诉 rails 它存在。当您通过清单文件告诉 rails 它在哪里时,它会将其包含在资产编译过程中,您可以定期访问它。

或者,您不必为资产使用资产管道

您可以使用常规包含 css 和 js 文件

 <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

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

于 2013-05-30T03:54:32.833 回答
3

要理解它,您必须查看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并且评论中有一个未解决的问题。

于 2013-05-30T03:37:25.647 回答
1

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

另外,如果您真的想更改 gem 中的某些内容,您可以将代码 fork 到您自己的 github 中,在本地分支上更改内容,然后在 gemfile 中指定您自己的 github 作为 gem 的源,例如...

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

但是,如果您真的是 Rails 新手,您可能不想尝试;)

于 2013-05-30T03:13:59.580 回答
0

我认为它是从安装在您的系统上并通过您的 Gemfile 包含在此项目中的 gem 中获取的。

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

于 2013-05-30T00:58:33.867 回答