Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rails:使用Sass的缺点&x27;s@import而不是*=require_Ruby On Rails 4_Import_Sass_Turbolinks - Fatal编程技术网

Ruby on rails 4 Rails:使用Sass的缺点&x27;s@import而不是*=require

Ruby on rails 4 Rails:使用Sass的缺点&x27;s@import而不是*=require,ruby-on-rails-4,import,sass,turbolinks,Ruby On Rails 4,Import,Sass,Turbolinks,我决定使用Sass的@import而不是Sprocket的*=require 我在应用程序中有这个。scss: @import 'normalize'; @import 'font-awesome'; @import 'variables'; @import 'application'; 这在blog.scss中是: @import 'normalize'; @import 'font-awesome'; @import 'variables'; @import 'application'

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

我在应用程序中有这个。scss

@import 'normalize';
@import 'font-awesome';
@import 'variables';
@import 'application';
这在blog.scss中是:

@import 'normalize';
@import 'font-awesome';
@import 'variables';
@import 'application';
这样,我就为单独的控制器提供了单独的样式表(使我的代码更有条理)

为了实现这一点,我还将
stylesheet\u link\u tag params[:controller]
添加到我的布局中,然后将
Rails.application.config.assets.precompile+=%w(blog.css)
行添加到我的/config/initializers/assets.rb文件中,并重新启动服务器


这种方法有什么缺点吗?TurboLink会更慢吗?

如果您有多个Sass文件,Rails资产管道指南实际上建议使用Sass的@import而不是Sprockets*=require

以下是《Rails资产管道指南》中的一段引用:

如果要使用多个Sass文件,通常应使用Sass@import规则,而不是这些链轮指令。使用链轮指令时,Sass文件存在于它们自己的范围内,使变量或混合仅在定义它们的文档中可用。()

在sass-rails-gem-Github页面()上也建议这样做。下面是该页的一段引语:

“链轮提供了一些指令,这些指令放在名为require、require_树和require_self的注释中。不要在SASS/SCSS文件中使用它们。它们非常原始,不能很好地处理Sass文件。相反,请使用Sass的原生@import指令,该指令是Sass rails定制的,用于与rails项目的约定集成。”

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

  • 主要的优势来自这样一个事实:SASS@import创建了一个全局名称空间,而Sprockets指令没有

  • 编译将在开发过程中加快一点,因为它不必在每次使用partial@import时重新编译所有的供应商混合

  • 使用@import全局命名空间会产生一种沃尔夫效应,团队中的开发人员倾向于在应该定义和重用变量的地方(在变量文件中)而不是在更具体的文件中定义和重用变量。例如,如果不在全局变量文件()中定义z索引,z索引可能会成为一场噩梦


  • 资产管道对待Sass@imports的方式与对待链轮的方式不同。在导入的情况下,每次保存都会执行并编译所有导入,无论您保存了哪个部分。样式表中处理链轮的方式是,只有您保存的部分会重新编译,然后注入到刷新时本地翻页。这使得链轮的平均速度比导入快得多,尽管使用@import确实有一些好处,如本线程其他部分所列。有关此主题的详细信息,请访问treehouse:


    如果您想知道使用多个导入是否会创建多个HTTP请求,从而产生开销,以下是sass网站对此的看法:

    Sass构建在当前CSS@import的基础上,但不需要HTTP请求,Sass将获取您要导入的文件,并将其与您要导入的文件组合,以便您可以向web浏览器提供单个CSS文件


    在开发过程中,我只使用@imports,特别是使用引导sass和几个ChoiceCompass组件时,我经历了非常缓慢的加载时间。我仍在尝试研究这个问题,但我不愿意等待10秒在dev中加载页面。@LessQuesar:您看到的是编译和执行所有导入的文件不管它们是否已更改。链轮没有此挫折。链轮仅重新编译更改的文件,请查看下面列出的树屋文章!