Asset Pipeline 理解

简单介绍个人对Asset pipeline的理解

Asset Pipeline 是什么

asset pipline 是一个提供连结缩小或者压缩 JavaScript 和 CSS 资源的框架。它也添加了用其它语言编写这些资源的功能, 如 CoffeeScript, Sass 和 ERB。

对于新手来说,Asset Pipeline无疑是一个比较难掌握的内容,特别是当Production模式之后,可能遇到的问题会更多,我们只有理解它,才能更好的使用它。

  1. Rails 3.1 之后,asset pipeline是自动打开的,你有两种方式不使用它:
  2. config/application.rb里面添加:config.assets.enabled = false
  3. 也可以在新建App的时候通过参数来关闭:rails new appname --skip-sprockets
  4. 目录结构
  5. app/assets存放应用程序本身所使用的JS、CSS和Image
  6. lib/assets存放自己拓展的JS、CSS和Image
  7. vendor/assets存放第三方拓展JS、CSS和Image,例如Jquery、Extjs等一些类库
  8. 搜索路径
  9. config/application.rb里面config.assets.paths << Rails.root.join("app", "assets")里面可以添加到预编译列表
  10. 例如,需要加载这个文件app/assets/javascripts/home.js,这只需要在application.js里面添加=// require home即可
  11. 注意:如果引用资源清单外的文件,必须加载到预编译列表,否知producion环境不可用

更多详细资料,请参阅

如何管理数据

  1. 一个新的Rails应用程序包含了一个默认的app/assets/javascripts/application.js文件,这个文件包含了一些行:
1
2
3
4
// ...
//= require jquery
//= require jquery_ujs
//= require_tree .
  • 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文件

Comments