黑名单Rails资产不会被预编译

时间:2016-01-14 10:25:52

标签: ruby-on-rails sass asset-pipeline mixins partial

[重新问清楚 - 这不是一个重复的问题] 我注释掉了所有包含的scss文件,并且出于某种原因Rails一直包含它们并且它导致了错误。然后我意识到错误发生在预编译中。 Rails正在遍历我的所有资产以预编译它们,但这包括所有部分和所有供应商部分。我无法重命名它们。如何将资产列入黑名单优先由正则表达式进行预编译?通过这种方式,我可以排除部分和供应商相关的部分,这些部分永远不会被直接引用,并且它们的父文件可以正确预编译而不会出错

2 个答案:

答案 0 :(得分:0)

问题不在于SCSS / SASS,而是您没有调用您的混音。

简单来说,这意味着您必须先引用admin/mixins,以便导入的文件具有使用参考:

#app/assets/stylesheets/modules.scss
@import "admin/mixins";
@import "modules/*";

这将调用modules.scss文件中的mixins,然后您可以根据需要引用它们。

答案 1 :(得分:-1)

[每条评论的评论评论] 问题在于,即使在开发模式下,我也在预编译所有资产,因此Rails会检查包括供应商资产在内的所有资产,而不考虑单个文件是否是部分文件。我通过添加以下代码来解决此问题,以排除任何部分内容,因为它以下划线开头或位于“黑名单”I also describe that solution 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),其次将消除与列入黑名单的表达式相匹配的任何内容。

最后,请注意keithgaputis部分回答了这个问题here,但没有考虑到需要一个正则表达式的黑名单。在Rails中,通常供应商资产以及您自己的应用程序资产都会有部分内容,按文件或文件类型按文件类型对文件进行排序真是太痛苦了。使用正则表达式将黑名单更好。