Rails:使用Sass的@import而不是*= require的缺点

Ste*_*han 6 import sass turbolinks ruby-on-rails-4

我决定使用Sass @import而不是Sprocket *=require.

我在application.scss中有这个:

@import 'normalize';
@import 'font-awesome';
@import 'variables';
Run Code Online (Sandbox Code Playgroud)

这在blog.scss中:

@import 'application';
Run Code Online (Sandbox Code Playgroud)

这样我就可以为不同的控制器设置单独的样式表(使我的代码更有条理).

为了使这项工作,我还添加stylesheet_link_tag params[:controller]到我的布局,然后添加Rails.application.config.assets.precompile += %w( blog.css )到我的/config/initializers/assets.rb文件行,并重新启动服务器.

这种方法有什么缺点吗?将turbolinks是慢?

And*_*rie 6

如果你有多个Sass文件,Rails Asset Pipeline指南实际上建议使用Sass的@import而不是Sprockets*= require.

以下是Rails Asset Pipeline指南的引用:

"如果你想使用多个Sass文件,你通常应该使用Sass @import规则而不是这些Sprockets指令.当使用Sprockets指令时,Sass文件存在于它们自己的范围内,使变量或mixin仅在它们被定义的文档中可用in.(http://guides.rubyonrails.org/asset_pipeline.html)"

这也推荐在sass-rails gem Github页面(https://github.com/rails/sass-rails)上.这是该页面的引用:

"Sprockets提供了一些放在注释中的指令,名为require,require_tree和require_self.不要在你的SASS/SCSS文件中使用它们.它们非常原始,不适用于Sass文件.而是使用Sass的原生@import sass-rails已经定制的指令,可以与Rails项目的约定集成."

这种方法没有任何明显的缺点,实际上有很多好处(包括但不一定限于):

  1. 主要优点来自SASS @import创建全局命名空间,而Sprockets指令不创建.

  2. 编译将在开发中加速一点,因为每次每个partial @ import都不需要重新编译所有供应商mixin.

  3. 使用@import全局命名空间会创建一个Whorfian效果,团队中的开发人员倾向于定义和重用他们应该的变量(在变量文件中),而不是更具体的文件.例如,如果未在全局变量文件(http://pivotallabs.com/structure-your-sass-files-with-import/)中定义,z索引可能会成为一场噩梦.

  • 我在开发过程中经历了非常慢的加载时间,当我只使用@imports时,特别是如果使用bootstrap-sass和一些选择指南针组件.我仍然在尝试研究这个问题,但是我很高兴等待10秒钟在开发中加载页面. (4认同)