【问题标题】:Add all .css files to precompile?添加所有 .css 文件进行预编译?
【发布时间】:2018-04-18 18:50:13
【问题描述】:

我想包含所有要预编译的 css 文件。现在我使用 @import 将其他 css 包含到 application.css 中。但我想根据控制器加载特定的css文件:

<%= stylesheet_link_tag params[:controller] %>

它给了我一个错误,告诉我将 css 添加到预编译器。假设我将它添加到 config/initializers/assets.rb:

Rails.application.config.assets.precompile += %w( pages.css )

现在它可以工作了,但只适用于那个特定的控制器。我可以手动为每个控制器添加每个 css 文件。它会这样工作,但必须有更好的方法。

我正在使用引导程序,所以我不能使用:

*= require_

我都试过了(不是同时):

Rails.application.config.assets.precompile += %w( *.css *.js)
Rails.application.config.assets.precompile = %w( *.css *.js)

但现在我收到了这个错误:

Undefined variable: "$alert-padding-y".

我猜这来自引导程序。但在我尝试将文件添加到预编译之前它就可以工作了。

=====

编辑:我尝试了Daniel Westendorf 的帖子。将此代码放在 assets.rb 中:

Rails.application.config.assets.precompile = []
Dir[Rails.root.join("app", "assets", "**", "*.css")].each do |file|
  Rails.application.config.assets.precompile << file
end

但是我收到了这个错误:

Asset was not declared to be precompiled in production.
Add `Rails.application.config.assets.precompile += %w( application.css )` to `config/initializers/assets.rb` and restart your server

我尝试通过添加 css 和 js 来修复它(它稍后要求它):

Rails.application.config.assets.precompile += %w( application.css application.js )

但我还是遇到了同样的错误:

Asset was not declared to be precompiled in production.
Add `Rails.application.config.assets.precompile += %w( pages.css )` to `config/initializers/assets.rb` and restart your server

【问题讨论】:

    标签: ruby-on-rails twitter-bootstrap ruby-on-rails-5 bootstrap-4


    【解决方案1】:

    这通常与更好的网络惯例相悖。一个较大的缓存网络请求将比许多较小的单个网络请求执行得更好。

    但是,您可以在资产目录中找到所有 .css 文件,并将每个文件添加到预编译数组中。比如:

    Rails.application.config.assets.precompile = []
    Dir[Rails.root.join("app", "assets", "**", "*.css")].each do |file|
      Rails.application.config.assets.precompile << file
    end
    

    【讨论】:

    • 对。只需在 html 或 body 元素中添加一个类,然后在您的样式表/js 中使用它。根据要加载的不同文件已过时,并且不适用于 turbolinks。
    • 我打算让每个页面最多加载 2 个 css。一个是全局的,另一个是特定于该控制器的。如果这不是好的做法,我愿意以正确的方式去做。即使不使用某些样式,也会将所有 css 放入一个文件中?
    • 也许我做错了什么,但是当我尝试你的方法时,我得到了错误。尝试在评论中发帖有点奇怪,我将编辑主要帖子。
    • 是的,您应该将它们全部包含在一个文件中,即使它们没有在该页面上使用,因为浏览器会缓存一个大样式表,而无需在另一个文件中再次下载使用其他样式的页面。在大多数情况下,网络请求比文件大小更昂贵。
    • 至于我的代码,它假定您的文件以 .css 结尾,而不是 .scss、.less 或其他。
    【解决方案2】:

    我使用了这个代码。它对我来说非常好用。

    将此代码添加到config/initializers/assets.rb

    # for css files
    Dir[Rails.root.join("app", "assets", "**", "*.css")].each do |file|
      Rails.application.config.assets.precompile << file
    end
    
    # for js files
    Dir[Rails.root.join("app", "assets", "**", "*.js")].each do |file|
      Rails.application.config.assets.precompile << file
    end
    

    【讨论】:

      猜你喜欢
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多