【发布时间】:2021-03-16 03:09:02
【问题描述】:
我正在构建一个 Rails 应用程序,但遇到了一些奇怪的 sass 编译问题。
我的设置:
- Rails 6.1.3
- Ruby 3.0.0
- sass-rails 6.0.0
- sassc-rails 2.1.2
我的application.scss 基本上会加载一些设置一些变量的sass 文件,最后导入layout.scss,它有效地使用了导入的变量。
// application.scss
@import "normalize";
@import "variables/colors";
@import "variables/typography";
@import "variables/sizes";
@import "layout";
// variables/_typography.scss
$ui-font-family: "Poppins", sans-serif;
$ui-font-family-title: "Lato", sans-serif;
// layout.scss
h1, h2, h3, h4, h5, h6 {
font-family: $ui-font-family-title;
}
// views/layouts/application.html.erb
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
一开始它有效,但后来我注意到有时我收到一个错误提示
Error: Undefined variable: "$ui-font-family-title".
on line 3:16 of app/assets/stylesheets/layout.scss
>> font-family: $ui-font-family-title;
但是,有时在重新编译资产后(由于任何 scss 文件中的更改)我注意到它可能工作或失败(出现该错误)。
我在每个 sass 文件中添加了一个@debug "Compiling filename" 以了解编译顺序,并发现一些对我来说很奇怪的东西。
它总是对每个sass文件编译两次,问题是有时它编译一次变量,因此在第二次编译layout.scss时会失败。
这是它工作时的样子:
这是失败时的样子:
如您所见,当它失败时,它会连续两次编译layout.scss 文件,我的猜测是,由于在第二次迭代中它不会导入其他文件,所以它找不到变量为预计。
您知道这里可能出了什么问题吗?
【问题讨论】:
标签: ruby-on-rails sass sprockets