【问题标题】:Images not showing on heroku-deployed React app, but responding with 200图片未显示在 heroku 部署的 React 应用程序上,但响应为 200
【发布时间】:2019-01-22 08:19:46
【问题描述】:

我在 Heroku 上部署了一个简单的 react 应用程序(使用静态构建包 https://github.com/heroku/heroku-buildpack-static),但是图像没有加载。我知道这必须与路径有关,因为它在本地对我有用,但是我没有尝试过任何工作。

这是目录的样子

build
  index.html
  bundle.js
node_modules
public
  images
    logo.png
    index.html
src
    components
        LeftSidebar
            index.js
static.json
webpack.config.js

这是我的static.json 文件:

{
  "root": "build",
  "routes": {
    "/**": "index.html"
  },
  "https_only": true
}

我已将图像 src(LeftSidebar 组件中的 jsx)设置为具有从构建到公共目录的相对路径。从构建文件夹到公用文件夹的相对路径如下:

"../public/images/logo.png"

我这样做的原因是因为我认为浏览器中实际运行的唯一内容是加载 bundle.js 的 index.html 文件,该文件正在调用 <img /> 这个相对路径会工作。 (如有错误请指正)

我还尝试设置路径,使其相对于我的特定组件 LeftSidebar -- index.js 到公用文件夹中的图像:

../../../public/images/logo.png

我也试过了

public/images/logo.png

还有其他一些变体,都没有运气。

我认为我一定遗漏了一些更重要的东西,即静态 Web 服务器(在本例中为 Nginx)服务静态资产的方式。或者以 Webpack 最终创建 bundle.js 文件的方式。

没有返回 404 状态码也很奇怪,但是图像不会加载,并且网络选项卡中的响应只是一个白屏。

【问题讨论】:

  • 试试 images/logo.png

标签: reactjs heroku webpack deployment webserver


【解决方案1】:

在将图像导入 React 时,我们通常依靠 Webpack 来复制适当的文件,而不是必须引用公共目录,例如

src
    components
        MyComponent
            index.jsx
            image.png

在我的index.jsx 文件中,我只需像这样导入图像:

import myImage from './image.png';

最后,也是最重要的一点,您需要更新您的 Webpack 配置以包含一个用于图像的加载器(如果尚未包含),例如 file-loader

有关该过程的更多详细信息,请参阅此问题/答案:How to import image (.svg, .png ) in a React Component

【讨论】:

  • 所以这意味着对于每一个图像我需要做和导入语句?这也不能解释为什么这是在本地工作。
  • 确实,这通常是我们在 React 中处理本地托管图像的方式。请参阅create-react-app 文档进行确认:facebook.github.io/create-react-app/docs/…。在本地运行应用程序时,您使用的是 webpack-dev-server,这与生产构建不同。通常,您的 webpack 开发配置与生产配置有很大不同,因为生产将包括优化任务。
  • 这似乎有点低效。这意味着无论导入语句中的嵌套/子目录如何,我都必须使用图像的相对路径。感谢您的选择,但我确实相信必须有更有效的方法来解决所有图像所在的公共路径。关于本地,如果我只是在浏览器中运行我的 index.html 文件,它也可以工作——没有 webpack-dev-server
  • 实际上,从 React/Webpack 的角度来看,它非常高效,因为它将图像转换为数据 URI,从而减少了用户浏览器需要发出的请求数量。如果您愿意,您仍然可以拥有一个包含所有图像的顶级目录,它们不一定必须位于组件目录中。显然选择权在你,但这就是 React 的设计方式。
  • 对,我了解data-uri的效率。我希望将它作为顶级目录,而无需每次都编写不同的相对路径。从开发人员的角度来看,这是低效的。有什么想法可以实现吗?
猜你喜欢
  • 2017-09-26
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 2021-04-08
  • 2020-10-24
  • 1970-01-01
相关资源
最近更新 更多