[重新问清楚 - 这不是一个重复的问题] 我注释掉了所有包含的scss文件,并且出于某种原因Rails一直包含它们并且它导致了错误。然后我意识到错误发生在预编译中。 Rails正在遍历我的所有资产以预编译它们,但这包括所有部分和所有供应商部分。我无法重命名它们。如何将资产列入黑名单优先由正则表达式进行预编译?通过这种方式,我可以排除部分和供应商相关的部分,这些部分永远不会被直接引用,并且它们的父文件可以正确预编译而不会出错
答案 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中,通常供应商资产以及您自己的应用程序资产都会有部分内容,按文件或文件类型按文件类型对文件进行排序真是太痛苦了。使用正则表达式将黑名单更好。