Rails 管理的 JS assets 的方法

tonytonyjan · 2012年12月05日 · 最后由 ryudoawaru 回复于 2013年03月06日 · 2858 次阅读

Rails Guide Style

Rails Guide 上面有这样的写法:

<%= javascript_include_tag params[:controller] %>
or 
<%= stylesheet_link_tag params[:controller] %>

但是这样写的话,在 production 时一定会报错,所以要在 config.assets.precompile 加上不少东西,类似:

config.assets.precompile << Proc.new { |path|
    if path =~ /\.(css|js)\z/
      full_path = Rails.application.assets.resolve(path).to_path
      app_assets_path = Rails.root.join('app', 'assets').to_path
      if full_path.starts_with? app_assets_path
        puts "including asset: " + full_path
        true
      else
        puts "excluding asset: " + full_path
        false
      end
    else
      false
    end
  }

然而这在 Rails Guide 上面并没有提醒我们要做这件事情(所以想贡献一下这个提示到 docrails 这个 repo 上)

Garber Irish Style

然而有另外一种方案:http://viget.com/inspire/extending-paul-irishs-comprehensive-dom-ready-execution

使用起来的话,以 posts.js.coffee 为例子:

SITENAME.posts =
  index: () ->
    # blablabla
  show: () ->
    # blablabla
  new: () ->
    # blablabla
  edit: () ->
    # blablabla
  update: () ->
    # blablabla

我觉得很有条理,而且比上述的 Rails Guide style 简单很多,如果要共用重复的代码也可以这么做:

SITENAME.posts =
  index: () ->
    this.do_something()
  show: () ->
    this.do_something()
  new: () ->
    this.do_something()
  edit: () ->
    this.do_something()
  update: () ->
    this.do_something()
  do_something () ->
    #blablabla

因为管理方便,所以最近的专案都开始使用这个方法了。


来此除了推广 Garber Irish 的方法之外,也想向各位取经:

  1. 不知道大家是怎么管理自己的 javascript assets 的?

  2. 大家会选择上述哪一个方法?

我不觉得 rails guide 上的符合我朝国情,比如你集成 kindeditor 吧,大量的零散的 js img css 根本没办法用 assets pipeline 管理,很多重型 js lib 都有这个问题,不信你看 jquery-ui-rails 的做法,索性直接用 rails-way 改写了一遍 我不觉得一定要做到一个 view 把 js css img 合并,现在的做法是自己设定了一套编译规则替代 rails 默认的,具体见代码https://github.com/jasl/start_up/blob/master/config/environments/production.rb

https://github.com/tonytonyjan/gistyle This is a Rails extension gem named gistyle (Garber-Irish Style) using this idea.

寫 js 真辛苦~

需要 登录 后方可回复, 如果你还没有账号请 注册新账号