Persisting SCSS variables in rails asset pipeline?

一世执手 提交于 2019-11-30 14:35:52

问题


I'm upgrading a rails app with lots of SCSS stylesheets to use the asset pipeline, and need to include some global variables and mixins for each file.

Adding several @import directives at the top of every file isn't very DRY, so I'd like to do something like this:

# application.css
/*
*= require variables
*= require mixins
*= require_tree .
*/

This doesn't work of course, because the variables are not persisted across files. Anyone know how to achieve this?


回答1:


The default manifest syntax isn't powerful enough to give you useful Sass features like shared variables, mixins, etc. Instead, you should:

  1. Rename application.css to application.scss (or application.css.scss in Rails 4 or earlier)
  2. Instead of using the

    /*
     *= require variables
     *= require mixins
     *= require_tree .
     */
    

    nonsense, you should now use

    @import "variables";
    @import "mixins";
    @import "blah"; // import each SCSS file in your project like this.
    

    This will ensure you have full benefit of your variables and mixins throughout your project, and you are kept as DRY as Sass allows.




回答2:


Simply importing the necessary file from each Scss or Sass file seems to have worked for me. For example, I have a colors.scss file that includes some constants like this:

$black: #222;

I require it in my application.css manifest along with some other files:

/*
 *= require colors
 *= require buttons
*/

In my buttons.css.scss file, I simply do this to avoid the error:

@import "colors";



回答3:


Doesn't seem to be possible. Ended up prepending each file with @import 'includes/all'; and including everything else from includes/all.css.scss.




回答4:


Replace require with @import and remove any = require even if you think you've commented it out.



来源:https://stackoverflow.com/questions/8887824/persisting-scss-variables-in-rails-asset-pipeline

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!