如何在Sprockets 4中存入资产而不破坏所有内容?

问题描述 投票:0回答:1

我有一些应该互斥的不同样式表,我们称它们为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文件应该如何工作的任何信息。

任何人都知道如何保持样式表文件的存根而不破坏整个管道?

css ruby-on-rails asset-pipeline sprockets precompile
1个回答
0
投票

答案实际上非常简单,问题出在我的application.css中的require_tree .。我只是删除了其中的所有内容,并使用.css而不是.css.scss在manifest.js中一一添加了样式表,如下所示:

//= link dark.css
//= link light.css

然后像以前一样根据需要包含文件。现在它们都已预编译,但不会互相干扰。

© www.soinside.com 2019 - 2024. All rights reserved.