【问题标题】:Sass::SyntaxError: Undefined mixin 'mixin_name'Sass::SyntaxError: 未定义的 mixin 'mixin_name'
【发布时间】:2014-11-17 14:32:36
【问题描述】:

我正在开发一个 Rails 4 项目,我正在使用 Sass 和 Sass 的 @import 将多个 css 合并为一个。它工作正常,但如果我为 mixins (_mixins.css.scss) 使用新的部分并仅在 main.css.scss 中 @import 这个并使用 mixins 之后添加的任何其他文件 _webapp.css.scss

    @import "bootstrap/bootstrap";
    @import "responsive/mega_menu";
    @import "responsive/mixins";
    @import "responsive/webapp";

Rails 预编译过程无法找到“responsive/mixins”并在_webapp.css.scss 中给出错误

Sass::SyntaxError: Undefined mixin 'mixin_name'.

这里mixin_name定义在responsive/mixins

【问题讨论】:

标签: ruby-on-rails-4 sass pre-compilation


【解决方案1】:

对我来说,这听起来像是一个资产管道问题。来自the Rails docs

如果要使用多个 Sass 文件,一般应该使用 Sass @import 规则 而不是这些 Sprockets 指令。使用 Sprockets 指令,所有 Sass 文件都存在于其中 它们自己的作用域,使变量或 mixin 仅在定义它们的文档中可用。

您确定在某处没有 sprocket 指令,需要 responsive/webapp(甚至隐含在 require_tree 中)?

想到的另一种可能性是,这个未定义的混合错误实际上可能在被导入之前被调用。你确定你没有在mega_menu 的某个地方使用那个mixin吗?

【讨论】:

    【解决方案2】:

    如果你的文件名为mixins.css.scss,那么你只能在它被称为mixins.css 时导入它,因为SASS 试图解释@import 语句。如果没有扩展,SASS 期望它是[filename].scss。您正在尝试导入 [filename].scss,而您的名字是 [filename].css.scss。所以试试:

    @import "responsive/mixins.css";
    

    【讨论】:

      【解决方案3】:

      如果除 main.css.scss 之外的样式表使用来自 mixin 部分的 mixin,那么您也必须在其中导入它。所以看起来你需要在你的 webapp 部分中导入 mixins。

      【讨论】:

      • 是的,这就是我现在使用的解决方案。但这不是使用 Sass 和 mixins 的理想和最佳方式
      • 怎么不理想? Mixin 本身不会作为 CSS 输出。如果您的 webapp 部分依赖于这些 mixin,那么您必须包含它们。没有真正的解决办法。
      猜你喜欢
      • 2021-11-07
      • 1970-01-01
      • 2022-11-03
      • 2012-10-30
      • 1970-01-01
      • 2016-04-09
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多