我已经看到了一些关于在使用Rails管道时避免预编译各种资产的问题/答案;但是,我希望通过一组正则表达式有效地将黑名单列入路径名匹配以从预编译中排除。对我来说最常见的是,这通常是一组无论如何都会使预编译失败的部分。
答案 0 :(得分:1)
首先 - keithgaputis有专业answered a part of this here,但对上述问题并不完全是答案。阅读并投票给他的答案,然后看看我对他下面的补充:
Rails.application.config.assets.precompile << Proc.new { |path|
blacklist = [
/nvd3\/src\/intro.js$/,
/nvd3\/src\/outro.js$/,
/^.*\.less$/,
/admin\/modules/,
/admin\/themes/,
/admin\/responsive\..*css/
]
full_path = Rails.application.assets.resolve(path)#.to_path
puts "path: #{path}\nfull_path: #{full_path}" if BLACK_MAGIC[:assets][:debug]
if (path =~ /(^[^_\/]|\/[^_])[^\/]*$/) and (path !~ Regexp.union(blacklist) )
puts "including asset: " + full_path if BLACK_MAGIC[:assets][:debug]
true
else
puts "excluding asset: " + full_path if BLACK_MAGIC[:assets][:debug]
false
end
}
您可以将所有正则表达式添加到黑名单数组中以进行排除,然后将两个部分添加到条件
if (path =~ /(^[^_\/]|\/[^_])[^\/]*$/) and (path !~ Regexp.union(blacklist) )
将首先消除以下划线开头的项目(这不是一个非常完美的正则表达式,使用rubular),其次将消除与列入黑名单的表达式相匹配的任何内容。快乐的编码!