避免在Rails中预编译资产部分(Regex的黑名单)

我已经看到了一些关于避免在使用Rails管道时预编译各种资产的问题/答案; 但是,我希望通过Regex的数组有效地将黑名单用于路径名匹配以从预编译中排除。 对我来说最常见的是,这通常是一组无论如何都会使预编译失败的部分。

首先,keithgaputis 在这里熟练地回答了其中的一部分,但这并不能解决上述问题。 阅读并投票给他的答案,然后看看我对他的下面的补充:

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),其次将消除与黑名单表达相匹配的任何内容。 快乐的编码!