我有一些应该互斥的不同样式表,我们称它们为light.css.scss和dark.css.scss。到目前为止,我的资产管道包括:
在app / assets / stylesheets文件夹中创建文件:
application.css
light.css.scss
dark.css.scss
将它们包括在我的initializers / assets.rb中:
Rails.application.config.assets.precompile += %w( light.css.scss )
Rails.application.config.assets.precompile += %w( dark.css.scss )
将它们存入我的application.css文件中:
/*
*= require_self
*= require_tree .
*= stub dark.css.scss
*= stub light.css.scss
*/
然后在需要时手动要求它们:
<% if subdomain == "light" %>
<%= stylesheet_link_tag "light" %>
<% else %>
<%= stylesheet_link_tag "dark" %>
<% end %>
效果很好,但是后来我将Sprockets gem升级到4.0,一切都坏了。事实证明,我需要一个assets / config / manifest.js文件,但实际上,我只能在该文件上找到的唯一信息是this,那个人说他也找不到任何信息,并且他的应用正常运行罚款与空白。使用空白文件时,出现如下错误:
#<ActionView::Template::Error: Asset `favicons/dark.png` was not declared to be precompiled in production.
暗示清单文件负责预编译所有资产。但是当我输入样板代码时:
#manifest.js
//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
我明白了:
#<ActionView::Template::Error: couldn't find file 'dark.css.scss' with type 'text/css'
而且无论如何我都会遇到各种类似的未找到的文件错误。从我的application.css取消样式表文件的存入时,我没有收到错误,但是所有样式混合在一起,这是设计的噩梦。我收集到application.css在“隐藏”文件,然后在找不到文件manifest.js时感到困惑,但是我不知道该怎么办。我尝试将它们从application.css中取消存根,然后将它们存入manifest.js中,但这也不起作用。真正奇怪的是,我找不到有关manifest.js文件应该如何工作的任何信息。
任何人都知道如何保持样式表文件的存根而不破坏整个管道?
答案实际上非常简单,问题出在我的application.css中的require_tree .
。我只是删除了其中的所有内容,并使用.css而不是.css.scss在manifest.js中一一添加了样式表,如下所示:
//= link dark.css
//= link light.css
然后像以前一样根据需要包含文件。现在它们都已预编译,但不会互相干扰。