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