我将我们的Rails(3.2.17)应用程序升级到sass并且我遇到了未定义的变量"资产预编译期间的错误。我使用@import将我的代码片段包含在master.scss文件中。此设置在本地运行良好,但在预补偿时出错。解决错误的唯一方法是将@import片段分成片段,这些片段引用第一个片段中定义的mixins和变量。
例如:我@import' fonts'和'按钮'进入master.scss然后我要@import'字体'第二次进入'按钮'因为它使用了' fonts'中定义的变量。这避免了预补偿错误,但它并不理想,因为它不仅仅是一个'字体的实例。加载到应用程序,现在有两个。
@importing所有片段只有一次进入master.scss在本地工作时我不进行预编译。必须有一个解决方案。有什么想法吗?
答案 0 :(得分:22)
您看到此错误是因为您使用application.css
require
指令。
来自SASS rails文档。
Sprockets提供了一些放在注释中的指令,名为require,require_tree和require_self。请勿在您的SASS / SCSS文件中使用它们。它们非常原始,与Sass文件不兼容。相反,使用Sass的本地@import指令,sass-rails已经定制,可以与Rails项目的约定集成。
只需将application.css
重命名为application.css.scss
(使用.sass
并不适合我)。删除require self
以外的所有内容。在那里添加全局@import
语句。
另外需要注意的是,您需要手动将所有css文件@import
添加到application.css.scss
。我通常会创建一个文件夹app/assets/stylesheets/app
并添加@import app/**/*
作为application.css.scss
的最终条目
我希望这会有所帮助。
答案 1 :(得分:5)
我使用以下帮助解决了问题:SASS - use variables across multiple files。
基本上,您创建一个主文件来保存所有变量等,然后将主文件导入到引用变量的每个片段中。我遇到的一个障碍是使用mixins。我不得不将mixin文件导入master,这些变量可以在其他代码片段中使用。