在预编译中使用未定义的变量

时间:2014-03-14 17:46:24

标签: ruby-on-rails sass precompile

我将我们的Rails(3.2.17)应用程序升级到sass并且我遇到了未定义的变量"资产预编译期间的错误。我使用@import将我的代码片段包含在master.scss文件中。此设置在本地运行良好,但在预补偿时出错。解决错误的唯一方法是将@import片段分成片段,这些片段引用第一个片段中定义的mixins和变量。

例如:我@import' fonts'和'按钮'进入master.scss然后我要@import'字体'第二次进入'按钮'因为它使用了' fonts'中定义的变量。这避免了预补偿错误,但它并不理想,因为它不仅仅是一个'字体的实例。加载到应用程序,现在有两个。

@importing所有片段只有一次进入master.scss在本地工作时我不进行预编译。必须有一个解决方案。有什么想法吗?

2 个答案:

答案 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,这些变量可以在其他代码片段中使用。