只是想稍微澄清一下。这是基于我目前的理解,它似乎运作良好,但仍可能不完全准确。
资产管道处理的 CSS 获得 css_link_tag,通过 Webpacker javascript 包导入的 css 被 css_pack_tag 引用。
资产管道 css 位于 app/assets/stylesheets。 Webpack css 在app/javascripts/wherever_you_want.
所以在 webpack 中,所有导入到 javascript bundle 中的 css 最终都会被提取到一个 servable 文件中,该文件可以通过与 js bundle 相同的名称来引用。
所以如果在app/javascripts/application.js 你有:
import 'app/javascripts/css/one.css'
import 'app/javascripts/css/two.css'
import 'app/javascripts/css/three.css'
这些将被引用
css_pack_tag 'application'
这在我的部署日志中看起来像这样
Entrypoints:
application (430 KiB)
css/application-9d82d487.css
js/application-9f45d7ff735a7a203f28.js
还需要注意,如上所述,此行为受extract_css 设置的影响。
这在development 中默认为假,在production 中为真。与此相关的一个大问题是,至少在我的情况下,css_pack_tag 在开发中实际上并不是“必需的”,因为删除它没有任何效果,因为它不是在本地提取的。它仍然“有效”,因为 css 是在 javascript 中加载的,并且似乎以某种方式应用。所以我删除了这些标签,认为在我的理解提高之前它们是不必要的。不幸的是,一段时间后,当我在 heroku 上部署到生产环境时,我的 css 都没有工作,我花了一段时间才弄清楚原因并记住我已经删除了这些 css_pack_tag 行。