gpt4 book ai didi

css - Sass 混合递归; @include 循环

转载 作者:太空宇宙 更新时间:2023-11-03 18:22:42 25 4
gpt4 key购买 nike

有谁知道是否可以恢复 Sass 的功能,以防止为防止 @include 而实现的“错误修复”1递归?

消息是:

Syntax error: An @include loop has been found: <mixin-name> includes itself

这已在 3.0.5 中“修复”1 ,而且我不想(阅读:我不能)降级到那么远。不幸的是,我对 Ruby 的了解还不够多,无法通过源代码进行筛选,虽然我正在花时间改变它,但它现在对我没有帮助。

那么,是否可以2将此功能恢复到 3.0.5 之前的功能而无需降级;某处是否有重新补丁?我还没找到。

编辑:虽然我现在已经自己回答了这个问题,但我仍然愿意接受更好的答案;具体来说,更便携的解决方案,因为现在 Sass 文件将在其他任何地方中断(任何不是 pre-3.0.5 的地方)

<子>1 引号用于表示我不认为这是一个修复。我认为这是一个休息;不过,我会与负责人一起解决这个问题。
2 我知道这是可能的,但我的意思是专门针对没有 Ruby 实践经验的人。 我正在学习 Ruby!

最佳答案

好吧,有一个更简洁的方法来应用你的 hack:monkey-patchingCompass .

它将让您安全地共享您的元素,并且其他人将能够编译它而无需修改他们自己的 SASS 编译器。

1)

compass.rb 旁边创建 sass-visit-mixin-monkey-patch.rb 并从那里应用你的 hack:

class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
# Runs a mixin.
def visit_mixin(node)
#include_loop = true
#handle_include_loop!(node) if @stack.any? {|e| e[:name] == node.name}
include_loop = false

@stack.push(:filename => node.filename, :line => node.line, :name => node.name)
raise Sass::SyntaxError.new("Undefined mixin '#{node.name}'.") unless mixin = @environment.mixin(node.name)

if node.children.any? && !mixin.has_content
raise Sass::SyntaxError.new(%Q{Mixin "#{node.name}" does not accept a content block.})
end

args = node.args.map {|a| a.perform(@environment)}
keywords = Sass::Util.map_hash(node.keywords) {|k, v| [k, v.perform(@environment)]}
splat = node.splat.perform(@environment) if node.splat

self.class.perform_arguments(mixin, args, keywords, splat) do |env|
env.caller = Sass::Environment.new(@environment)
env.content = node.children if node.has_children

trace_node = Sass::Tree::TraceNode.from_node(node.name, node)
with_environment(env) {trace_node.children = mixin.tree.map {|c| visit(c)}.flatten}
trace_node
end
rescue Sass::SyntaxError => e
unless include_loop
e.modify_backtrace(:mixin => node.name, :line => node.line)
e.add_backtrace(:line => node.line)
end
raise e
ensure
@stack.pop unless include_loop
end
end

2)

需要 config.rb 中的猴子补丁:

# Enabling mixin recursion by applying a monkey patch to SASS compiler
require "./sass-visit-mixin-monkey-patch"

3)

使用 compass compile 编译您的元素。

关于css - Sass 混合递归; @include 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15531004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com