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
指令不能被随后的require
或include
指令覆盖。
如果你想在你的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。