避免在 Rails 中预编译资产部分(正则表达式列入黑名单)
Avoid precompiling asset partials in Rails (blacklist by Regex)
我看到一些 questions/answers 在使用 Rails 管道时避免预编译各种资产;但是,我想通过正则表达式数组有效地将路径名匹配列入黑名单,以从预编译中排除。对我来说,最常见的是,这通常是一组预编译无论如何都会失败的部分。
首先 -- 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 条件
if (path =~ /(^[^_\/]|\/[^_])[^\/]*$/) and (path !~ Regexp.union(blacklist) )
将首先消除以下划线开头的项目(这还不是一个完美的正则表达式,使用 rubular),其次将消除与黑名单表达式匹配的任何内容。编码愉快!
我看到一些 questions/answers 在使用 Rails 管道时避免预编译各种资产;但是,我想通过正则表达式数组有效地将路径名匹配列入黑名单,以从预编译中排除。对我来说,最常见的是,这通常是一组预编译无论如何都会失败的部分。
首先 -- 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 条件
if (path =~ /(^[^_\/]|\/[^_])[^\/]*$/) and (path !~ Regexp.union(blacklist) )
将首先消除以下划线开头的项目(这还不是一个完美的正则表达式,使用 rubular),其次将消除与黑名单表达式匹配的任何内容。编码愉快!