从Asset Packager升级到Assets Pipeline
2012-12-14 07:58
393 查看
最近做的一个项目是把一个原来 Rails 2 的网站升级到 Rails 3.2。 这个 project 里面用到了Asset Packager 来管理 Javascript 文件。Rails 3.1 开始采用 Assets Pipeline 来管理 Javascript,stylesheet,和 images 等资源。在研究了一下 Asset Packager 以后,发现它做的事情和 Assets Pipeline 接近。升级的策略比较直接,如下:
1. 把 public/javascripts 下的文件拷贝到 app/assests/javascripts下。
2. 对应文件 config/asset_packages.yml 里面的每个javascript package 名字,在 app/assets/javascripts 下创建一个文件。这个文件的名字格式如下: #{package_name}_package.js 。这个文件里面列出原来 package 包含的文件。
例如文件asset_packages.yml 里面包含如下内容
javascripts:
- base:
- jquery/jquery-1.3.2
- jquery/jquery.livequery
- jquery/jquery.validate-1.5.1
- jquery/jquery.blockUI
- ui_and_layout:
- jquery/jquery-ui-1.7.2.custom
- jquery/jquery.layout
现在文件base_package.js 里面内容如下
//= require jquery/jquery-1.3.2
//= require jquery/jquery.livequery
//= require jquery/jquery.validate-1.5.1
//= require jquery/jquery.blockUI
3. 原来代码里面用 javascript_include_merged 来引用这些 packages。现在我们要用Assets Pipeline的方法来引用。个人认为比较好的办法是自己定义javascript_include_merged,让它去调用javascript_include_tag。具体方法如下:
# file app/helpers/application.rb
module ApplicationHelper
def javascript_include_merged(*args)
js_files = args.map {|arg| "#{arg}_package"}
javascript_include_tag(*js_files)
end
end
4. 如果你使用assets precompiling,下面1行代码需要加入对应的config 文件里
config.assets.precompile += %w( base_package.js )
以上步骤,不需要修改 View 里面的代码。调试也简单。又是快乐的一天。
1. 把 public/javascripts 下的文件拷贝到 app/assests/javascripts下。
2. 对应文件 config/asset_packages.yml 里面的每个javascript package 名字,在 app/assets/javascripts 下创建一个文件。这个文件的名字格式如下: #{package_name}_package.js 。这个文件里面列出原来 package 包含的文件。
例如文件asset_packages.yml 里面包含如下内容
javascripts:
- base:
- jquery/jquery-1.3.2
- jquery/jquery.livequery
- jquery/jquery.validate-1.5.1
- jquery/jquery.blockUI
- ui_and_layout:
- jquery/jquery-ui-1.7.2.custom
- jquery/jquery.layout
现在文件base_package.js 里面内容如下
//= require jquery/jquery-1.3.2
//= require jquery/jquery.livequery
//= require jquery/jquery.validate-1.5.1
//= require jquery/jquery.blockUI
3. 原来代码里面用 javascript_include_merged 来引用这些 packages。现在我们要用Assets Pipeline的方法来引用。个人认为比较好的办法是自己定义javascript_include_merged,让它去调用javascript_include_tag。具体方法如下:
# file app/helpers/application.rb
module ApplicationHelper
def javascript_include_merged(*args)
js_files = args.map {|arg| "#{arg}_package"}
javascript_include_tag(*js_files)
end
end
4. 如果你使用assets precompiling,下面1行代码需要加入对应的config 文件里
config.assets.precompile += %w( base_package.js )
以上步骤,不需要修改 View 里面的代码。调试也简单。又是快乐的一天。
相关文章推荐
- Rails的静态资源管理(六)—— Asset Pipeline缓存存储方式、预处理、升级等
- Ruby on Rails 3.1 Released, Brings Assets Pipeline, Streaming, and Javascript Changes
- it seems nifity generator is not support rails3.1 due to the asset pipeline
- AssetManager.openFd(String fileName)读取assets下文件报错解决方案
- Yii2 AssetManage linkAssets
- Unity-AssetBundle详细解读(二)打包好AssetsBundle产生的Manifest文件是干什么的?
- Assets/spine-unity/Editor/SkeletonBaker.cs(803,21): error CS0619: ....升级Unity2017 问题解决
- Rails Assets Pipeline
- Rails的静态资源管理(四)—— 生产环境的 Asset Pipeline
- AssetManager assets文件夹
- BuildPipeline.BuildAssetBundle 编译资源包
- (转)[Unity3D]BuildPipeline.PushAssetDependencies 打包依赖包,优化UI Prefab的资源引用加载(坑爹之处)
- Cannot mark assets and scenes in one AssetBundle
- Unity资源处理机制(Assets/WWW/AssetBundle/...)读取和加载资源方式详解
- 如何理解ruby on rails中的asset pipeline
- 理解和运用Rails Asset Pipeline
- [Unity3D]BuildPipeline.PushAssetDependencies 打包依赖包,优化UI Prefab的资源引用加载
- 升级到XCode7之后插件RTImageAssets不能用的解决办法
- Unity5 新AssetBundle打包方式 BuildPipeline.BuildAssetBundles
- Loading Assets from AssetBundles