【问题标题】:Rails 3.1 - force SCSS variable value refresh?Rails 3.1 - 强制 SCSS 变量值刷新?
【发布时间】:2011-06-27 23:04:15
【问题描述】:

我在我的 assets/stylesheets 目录中设置了一组 [object].css.scss 样式,以对应我应用程序中的不同视图。每个工作表的第一行都包含一组全局样式变量值:

@import "branding.css.scss";

然后在需要时访问整个库中的变量值($primaryColor、$secondaryColor 等)。

它干得漂亮,但不幸的是,当我更改 _branding.css.scss 文件中的变量值时,Rails 不会刷新对象样式表。在 SCSS 使用更新的变量值重新编译对象样式库之前,我必须去触摸每个文件。

这是一个小问题,但它会破坏工作流程,尤其是当我不断清除浏览器缓存试图修复它时:/

有没有更好的方法来组织变量?

有没有办法强制刷新?

【问题讨论】:

  • Rails 团队无视多年来发展起来的 Sass 约定,并尝试在将其与 Sprockets(旨在与“愚蠢”CSS 一起使用)结合时温和地支持语法。我很想听听有关如何将 Sprockets 的行为更改为 Sass 自动编译的行为的建议(如果有任何文件更改,请在 tmp 目录中缓存),但我认为我们不会找到一。这些资产管道问题可能会在 RC 中保持 3.1 至少几周。

标签: css caching ruby-on-rails-3.1 sass


【解决方案1】:

我一直在将变量和 mixins 放入 includes.css.scss 文件中,并将它们导入到需要它们的每个样式表中。要在包含文件更改时重新编译 Rails,您需要在 application.js 中使用 depend_on 指令。例如:

application.css

/*
   *= depend_on includes
   *= require_self
   *= require stylesheet
*/

includes.css.scss

$bg-color: #999;

stylesheet.css.scss

@import "includes.css.scss";

body { background: $bg-color; }

【讨论】:

  • 你的意思是application.css吗?我试过这个并没有强制刷新。我在 Win7 上开发,因为我是一个受虐狂,也许这就是原因。
  • 是的,我很抱歉!我没有注意到任何问题,但也许尝试*= require includes 而不是*= depend_on includes 看看是否有效?也可能值得查看 Sprockets 文档:github.com/sstephenson/sprockets
【解决方案2】:

这确实很烦人……

我没有完整的解决方案,但我发现一件事是您只需触摸“application.css.scss”即可重新编译所有内容。

我最近开始使用guard-compass 和guard-livereload,但是在3.1 中也有同样的问题。也许比我聪明的人可以修复它,使其也触及“application.css.scss”?

【讨论】: