图像资产可用于CSS文件,但不适用于JS文件 - 为什么

Image assets available to CSS files but not JS files -- why?

本文关键字:文件 适用于 不适用 JS 为什么 用于 CSS 图像      更新时间:2023-09-26

我正在尝试通过 js 文件访问资产管道中的图像,但是我收到 404 错误,指出该图像不存在。我的理解是,Rails 指纹并将图像/资产预编译/预加载到浏览器上,因此文件路径"imageName.png"变成了"imageName-uniqueFingerprint.png"的效果,从而使原始路径不再有效。(如果我误会了,请纠正我(

我不明白的是为什么我可以在 CSS 文件中使用原始路径,例如:background: url('nebula_small.png')并且图像检索得很好,但是如果我尝试在 JS 文件中使用相同的路径,我会得到 404。我认为 Assets 目录中的所有内容都是由 Rails 预编译的,因此我假设对各自的资产具有平等的访问权限。

我可以编写一个辅助方法(根据此 StackOverflow 建议(将digest_path与原始路径相关联,但是我想知道是否有某种方法可以简单地为 JS 文件提供与 CSS 文件相同的图像访问权限。

对 Rails 来说还是新手,所以如果你需要澄清或者我的措辞很糟糕,我很抱歉。谢谢你的时间。

我想将

.erb扩展名添加到.js文件中并使用asset_path rails帮助程序的最简单方法:

$('#logo').attr({ src: "<%= asset_path('logo.png') %>" });

第二种方法稍微复杂一些,是分析.sprockets-manifest-md5hash.json文件,该文件编译到公用文件夹,其中包含图像的所有 URL。您可以在此处阅读有关它的更多信息:

http://edgeguides.rubyonrails.org/asset_pipeline.html#precompiling-assets

https://github.com/rails/sprockets/blob/master/UPGRADING.md#publicassetsmanifest-abc123json-location