如何从 `assets.precompile` 中正确删除 bootstrap CDN 并隔离控制器样式表

How to properly remove bootstrap CDN from `assets.precompile` and isolate controller stylesheets

我试图通过编译我的资产并通过 <%= stylesheet_link_tag "application", params[:controller] %>

在我的布局中渲染它们来将我的 CSS 隔离到特定的控制器

我正在使用 Bootstrap (4.3.1) CDN 并且在我的 application.scss 文件中有这个:

@import "bootstrap-sprockets";
@import "bootstrap";

问题是,当我执行 Rails.application.config.assets.precompile += %w( *.css ) 时,它必须正在编译 bootstrap,因为它给我这个错误:

Sass::SyntaxError in RecipeCategories#index

Undefined variable: "$alert-padding".

所以我用这个来“解决”它:

Rails.application.config.assets.precompile = [ Proc.new{ |path| !File.extname(path).in?('.css') }, /bootstrap.css$/ ]

我不知道这是否有效或最佳实践来防止 bootstrap 被预编译。

我还 运行 遇到一个问题,即一个控制器的样式表中定义的样式被加载到另一个控制器的视图中,直到页面刷新。 (我将 class 放在多个控制器视图中的一个元素上,以查看它是否真的与特定控制器隔离。)

基本上,一个控制器的 CSS 文件中的样式可以在其他控制器视图中使用,直到页面被刷新,然后该样式从控制器视图中不刷新的元素中“删除” CSS 文件中没有样式。

您似乎错误地通过 gem 和 Rails 资产管道预编译了 bootstrap 资产 AND 得到 bootstrap 来自 CDN。您只需要一个或另一个,因此您可以删除 gem 并只使用 CDN。