Rails 3.1 Sprockets需要指令 - 有没有办法排除特定文件?

时间:2011-09-29 19:25:46

标签: javascript ruby-on-rails sprockets

如果我在application.css中使用//=require_tree .,是否有办法排除特定文件,而不是诉诸//=require_directory和树组织?

也许像//= require_tree ., {except: 'something'}

5 个答案:

答案 0 :(得分:64)

Sprocket的新stub指令可以在Sprockets v2.2.0及更高版本中使用。但是,Rails 3.2只会使用没有此功能的Sprockets v2.1.3。截至目前,当前的Edge Rails具有stub指令,它将正式出现在Rails 4.0及更高版本中。

用法:

//= require jquery
//= require_tree .
//= stub unwanted_js
后续stubrequire指令无法覆盖

include指令。

如果要在Rails 3.2项目中使用stub指令,则必须切换到Edge Rails,或者将Rails gem的Sprockets依赖项修改为2.2.0版。

答案 1 :(得分:17)

自rails 3.2.9发布以来,它支持将链轮锁定到2.2.x版本,以便我们可以使用最新链轮具有的//= stub指令。

//= stub unwanted_js

http://weblog.rubyonrails.org/2012/11/12/ann-rails-3-2-9-has-been-released/

因此,要使用它,只需升级到Rails 3.2.9

答案 2 :(得分:4)

注意:此答案现已过时,Sprockets的更新已具备此功能。请参阅下面的答案。

===

这对于当前的Sprockets指令是不可能的,但它似乎是一个方便的功能。

手动列出所需文件的另一种方法。

也许你可以在Sprockets回购邮件中将其作为功能请求提交? : - )

答案 3 :(得分:0)

以下猴子补丁为我解决了这个问题:


module Sprockets
  class DirectiveProcessor
    # support for: require_tree . exclude: "", "some_other"
    def process_require_tree_directive(path = ".", *args)
      if relative?(path)
        root = pathname.dirname.join(path).expand_path

        unless (stats = stat(root)) && stats.directory?
          raise ArgumentError, "require_tree argument must be a directory"
        end

        exclude = args.shift == 'exclude:' ? args.map {|arg| arg.sub(/,$/, '')} : []

        context.depend_on(root)

        each_entry(root) do |pathname|
          if pathname.to_s == self.file or exclude.include?(pathname.basename(pathname.extname).to_s)
            next
          elsif stat(pathname).directory?
            context.depend_on(pathname)
          elsif context.asset_requirable?(pathname)
            context.require_asset(pathname)
          end
        end
      else
        # The path must be relative and start with a `./`.
        raise ArgumentError, "require_tree argument must be a relative path"
      end
    end
  end

end

答案 4 :(得分:0)

更好地使用https://github.com/QubitProducts/miniMerge

它不仅支持JS,而且还支持基本模式链轮。

您不仅可以排除文件级别,还可以阻止甚至是行。

具有多个来源基础的完全依赖管理。

我过去使用了sprockets,这个更好,我也用它来做CSS。