带引导程序的 Rails 资产管道

Posted

技术标签:

【中文标题】带引导程序的 Rails 资产管道【英文标题】:Rails assets pipeline with bootstrap 【发布时间】:2014-07-19 18:48:16 【问题描述】:

我知道这个问题已经讨论过几次,但我仍然找不到合适的方法。

我使用较少,我有 bootstrap.less(没有 gem)、global.less、variables.less、login.less。全部在 app/assets/stylesheet 目录中。

我的 application.less 看起来像这样:

 *= require 'bootstrap'
 *= require 'global'
 *= require 'login'

包括:

 <%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true %>

我尝试使用:rake assets:clean assets:precompile 我试图以多种方式@import

我遇到的问题: login.less 和 global.less 在我 @import 之前看不到变量。 如果没有 !important,我无法覆盖引导指令,这让我非常困惑。即使我以正确的顺序将它们导入到我的 application.less 中,它仍然会生成一个大的 application.css,其中 bootstrap 位于末尾。我不明白。

我希望我的 less 文件以正确的顺序覆盖它。如果它编译成一个文件以使浏览器加载网站更快,那就太好了(我虽然 require 这样做但看起来不是这样)

请建议我该怎么做。我在这个问题上浪费了我的时间。

【问题讨论】:

你可以@import 'bootstrap/variables' 【参考方案1】:

如果您想更改引导变量并在文件中使用变量/混合,您应该创建一个名为 bootstrap_and_overrides.less 的文件,在那里您导入所有其他文件并以正确的顺序引导。

application.css 中应该需要这个单个文件(以及任何其他文件,如 query-ui.css 等)。不过,您不应该在 application.css 中包含引导文件。

您也可以直接使用 application.css.less,但我在使用这种方法时遇到了一些问题。

【讨论】:

【参考方案2】:

我已经按照你说的做了。

我的应用程序.css:

 *= require general

general.less:

@import 'bootstrap';    
@import 'variables';
@import 'global';
@import 'login';

在全球范围内我有:

  border-radius: 0px;

如果没有 !important 就无法工作,因为它以某种方式被引导程序覆盖。这是唯一的问题,因为其余的工作正常......

...我正在写这篇文章的其余部分,而... 我的天啊。尤里卡:D 我用过:

input border-radius: 0;

但在引导程序中有:

.btn border-radius: 4px;

这是因为我不能在没有重要的情况下覆盖它!耶稣...

无论如何,感谢 Michal 的解决方案,因为它解决了所有其他问题。

【讨论】:

但是我有缓存问题:/ 通过添加depend_on修复。问题是@imported less 文件由于某种原因没有被重新编译,我需要将depend_on 变量等添加到 bootstrap_and_overrides.less

以上是关于带引导程序的 Rails 资产管道的主要内容,如果未能解决你的问题,请参考以下文章

升级引导程序后编译资产时出错

rails 应用程序中的引导程序,404(未找到)

Rails:在 rails 6 上安装和配置引导程序

在利用资产管道的 Rails 应用程序中,用于 css 文件中背景图像的正确路径是啥?

Rails 的脚手架 - 引导应用程序

带有子域的 Rails 资产管道不检索图像