stylesheet_pack_tag 不生成任何输出,尽管 CSS 文件存在于 packs 目录中

Pas*_*auf 2 ruby-on-rails vue.js webpacker

随着 Rails 的最新更新,stylesheet_pack_tag我们的 VueJS 客户端应用程序停止生成输出。Webpacker确实在文件/public/packs生成了 CSS 文件(在 JS 文件和其他文件旁边)。该javascript_pack_tag声明工作正常,但不知何故stylesheet_pack_tag仍然不复存在。我可能忽略了什么?

Pas*_*auf 6

一些调试让我得到了我正在寻找的答案。事实证明,以前在Webpacker 3.2.0 gem 中,stylesheet_pack_tag看起来像这样:

def stylesheet_pack_tag(*names, **options)
  unless Webpacker.dev_server.running? && Webpacker.dev_server.hot_module_replacing?
    stylesheet_link_tag(*sources_from_pack_manifest(names, type: :stylesheet), **options)
  end
end
Run Code Online (Sandbox Code Playgroud)

在新的Webpacker 4.0.X gem 中,stylesheet_pack_tag看起来像这样:

def stylesheet_pack_tag(*names, **options)
  if current_webpacker_instance.config.extract_css?
    stylesheet_link_tag(*sources_from_manifest_entries(names, type: :stylesheet), **options)
  end
end
Run Code Online (Sandbox Code Playgroud)

一开始就是罪魁祸首:此语句仅在webpacker.ymlcontains 时有效extract_css: true,如下所示:

default: &default
  # Extract and emit a css file
  extract_css: true
Run Code Online (Sandbox Code Playgroud)

当然,您也可以专门在开发、测试或生产级别进行设置。

事后看来,Webpacker 3.5 到 4 升级文档已经提到了这个变化(第一段中的第 6 点)以及本段