有什么区别
将 css 文件名添加到资产预编译配置
config.assets.precompile += ['foo.css', 'bar.css']
并放入清单文件 application.css
/* * 这是一个清单文件,它将自动包含此目录中可用的所有样式表 * 和任何子目录。您可以自由地将应用程序范围的样式添加到此文件,它们将出现在 * 编译文件的顶部,但通常最好为每个样式范围创建一个新文件。 *= 要求自我 *= 需要 foo *= 需要栏 */
?
有什么区别
将 css 文件名添加到资产预编译配置
config.assets.precompile += ['foo.css', 'bar.css']
并放入清单文件 application.css
/* * 这是一个清单文件,它将自动包含此目录中可用的所有样式表 * 和任何子目录。您可以自由地将应用程序范围的样式添加到此文件,它们将出现在 * 编译文件的顶部,但通常最好为每个样式范围创建一个新文件。 *= 要求自我 *= 需要 foo *= 需要栏 */
?
当您只想在 HTML 标头中包含 application.css 时,它是相同的。
但是如果你想在某些页面中只使用 foo.css(没有 application.css 和 bar.css),你必须在 config.assets 中这样做,以确保会有 foo.css 资产独立编译。
我不确定 Sprockets 是否是故意设计成这种行为的,但是当资产管道中的文件包含到 application.css(或者 application.js)中时,它们首先被连接然后预编译,从而产生一个文件对于包含在相应清单文件中的所有文件。
相比之下,指定为config.assets.precompile
的文件是一次性、即席编译的。如果指定了三个文件,那么将为每个文件生成一个单独的预编译文件(假设它是一个有效的、可预编译的文件)。
要绘制的另一个区别是 Rails 是否会默认预编译文件。根据资产管道上的Rails 文档:
编译文件的默认匹配器包括 application.js、application.css 和所有非 JS/CSS 文件(即,.coffee 和 .scss 文件在编译为 JS/CSS 时不会自动包括在内)
因此,假设清单中不包含 CSS 或 JS 文件,您需要将其添加到其中config.assets.precompile
,以便对其进行预编译和渲染。