Rails的3.1链轮需要指令 – 有没有办法排除特定的文件?

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

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

这是可能的Sprocket的新的stub指令,在链轮v2.2.0及以上。 不过,Rails 3.2只会使用没有这个特性的Sprockets v2.1.3。 截至目前,目前的Edge Rails有stub指令,它将正式在Rails 4.0及以上。

用法:

 //= require jquery //= require_tree . //= stub unwanted_js 

stub指令不能被随后的requireinclude指令覆盖。

如果你想在你的Rails 3.2项目中使用stub指令,你将不得不切换到Edge Rails,或者将Rails gem的Sprockets依赖关系修改为版本2.2.0。

自从rails 3.2.9发布以来,它支持将链轮locking到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

注意:这个答案现在已经过时了,更新了有这个function的Sprockets。 请参阅下面的答案。

===

这是目前的Sprockets指令不可能的,但它似乎是一个方便的function。

另一种方式来手动列出每个你想要的文件。

也许你可以把它作为一个function请求在Sprockets回购? 🙂

下面的猴子补丁为我解决这个问题:

 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 

尝试更好的https://github.com/QubitProducts/miniMerge

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

您不仅可以排除文件级别,还可以排除块或行。

全面依赖pipe理与多个来源基地。

我在过去使用过链轮,这一个更好,我也使用它的CSS。