在 rails 5.1.7 中删除资产管道后,Webpack 找不到图像路径

Webpack not finding image paths after removing the asset pipeline in rails 5.1.7

我正在使用 rails 5.1.7。并尝试从资产管道迁移到 webpacker,我已经 运行 rake assets:precompile

我收到这条消息:

Webpacker can't find logo.png in /***/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
   unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker's config/webpacker.yml file.
4. Your webpack configuration is not creating a manifest.
Your manifest contains:
{
  "application.js": "/packs/js/application-a5be4c0a9f54fffa5cb7.js",
  "application.js.map": "/packs/js/application-a5be4c0a9f54fffa5cb7.js.map",
  "entrypoints": {
    "application": {
      "js": [
        "/packs/js/application-a5be4c0a9f54fffa5cb7.js"
      ],
      "js.map": [
        "/packs/js/application-a5be4c0a9f54fffa5cb7.js.map"
      ]
    }
  }
}

那是在 app/javascript/images 中设置我的图像之后,我在其中验证了 logo.png 在那里。

提示此问题的行是:

   <%= link_to asset_pack_path('logo.png', alt: 'logo', width: 150), locale_root_path, class: 'logo'%>

如果我只是简单地删除该行,它将引导我进入也在该文件夹中的另一个不同图像的路径 (app/javascript/image)。

我有这个提取物来配置我的 app/javascript/packs/application.js 文件中的图像路径是:


const images = require.context('../images', true)
const imagePath = (name) => images(name, true)


首先你需要告诉 webpack 你想使用这个图像文件,所以(例如)在你的 app/javascript/packs/application.js 文件中放:

require.context('../images', true)

然后确认图像确实被编译到清单中。 然后将此图像放入 link,尝试(我不完全确定 webpacker 可以处理这个)image_pack_tag('media/images/logo.png')

试一试,让我们知道会发生什么。

需要配置Webpack来编译你的图片:

在您的 app/javascript 目录中,创建一个图像文件夹,并将 logo.png 放入其中。

image_tag 已更改为 image_pack_tag 现在您的图像正在使用 webpack 编译。但是,默认情况下,您每次都必须传入整个图像路径,以 media/ 开头,然后是您的 webpack 源路径中的路径,该路径在您的 webpacker.yml 配置文件中定义。例如:

<%= image_pack_tag 'media/images/logo.png', alt: 'logo', width: 150%>

要解决此问题,您可以使用 require.context:

在您的网页入口点中,默认情况下它位于 app/javascript/packs/application.js,您应该添加以下行:

const images = require.context("../images", true);

要访问您视图中的徽标图像,您现在可以使用:

<%= image_pack_tag 'logo.png', alt: 'logo', width: 150%>