Asset Pipeline 理解
简单介绍个人对Asset pipeline的理解
Asset Pipeline 是什么
asset pipline 是一个提供连结缩小或者压缩 JavaScript 和 CSS 资源的框架。它也添加了用其它语言编写这些资源的功能, 如 CoffeeScript, Sass 和 ERB。
对于新手来说,Asset Pipeline无疑是一个比较难掌握的内容,特别是当Production模式之后,可能遇到的问题会更多,我们只有理解它,才能更好的使用它。
- Rails 3.1 之后,
asset pipeline
是自动打开的,你有两种方式不使用它: - 在
config/application.rb
里面添加:config.assets.enabled = false
- 也可以在新建App的时候通过参数来关闭:
rails new appname --skip-sprockets
- 目录结构
app/assets
存放应用程序本身所使用的JS、CSS和Imagelib/assets
存放自己拓展的JS、CSS和Imagevendor/assets
存放第三方拓展JS、CSS和Image,例如Jquery、Extjs等一些类库- 搜索路径
- 在
config/application.rb
里面config.assets.paths << Rails.root.join("app", "assets")
里面可以添加到预编译列表 - 例如,需要加载这个文件
app/assets/javascripts/home.js
,这只需要在application.js
里面添加=// require home
即可 - 注意:如果引用资源清单外的文件,必须加载到预编译列表,否知producion环境不可用
更多详细资料,请参阅
- Asset Pipline 中文版
- Asset Pipline 英文版
- 如果需要,可在
config/application.rb
添加config.assets.enabled = false
关闭asset pipeline
功能
如何管理数据
- 一个新的
Rails
应用程序包含了一个默认的app/assets/javascripts/application.js
文件,这个文件包含了一些行:
1 2 3 4 |
|
require_tree
指令告诉Sprockets
递归地去包含在指定目录下所有
的 JavaScript 文件到输出里require_directory
它会将在某个特定目录下所有的 JavaScript 文件包含进去,但不递归.include
与require 一样,差别在于即使是被加载过的文件,也会被再次加载require_self
告訴Sprockets
在载入其他的文件时,先将自己的内容stub
将路径中得assets加入黑名单,所有其他的require都不会将它载入- 注意:引用时不需要显示提供拓展名,
require_tree
包含的文件是没有顺序的。 - 关掉
require_tree .
,它会递归加载当前文件下得所有文件,对于小系统来说,可能没多大影响,系统复杂了,每次都加载那么多文件,访问就会变慢了。 - 根据需求,组织你自己的加载方式,一下根据做ERP系统,写出我的加载方式
- 去掉
require_tree .
- 在三个
appliction.js
文件中,添加项目工用的JS和CSS代码,默认都会编译 - 通过修改
config.assets.precompile += %w( other.js , another.js)
,增加除了application.js
外的文件) - 在
/app/application_controller.rb
里面添加<%= javascript_include_tag params[:controller]/params[:action] %>
或者<%= stylesheet_link_tag params[:controller]/params[:action] %>
加载每个页面所使用到的Js和CSS文件