盖茨比不加载图标

Gatsby not loading favicons

我们正在使用 gatsby-plugin-manifest 生成我们的清单文件并导入我们的网站图标。一切都在我们的本地开发服务器上正常工作,因为图标已加载。

然而,当我们在我们的服务器上构建我们网站的静态 HTML 和 运行 这个文件时,我们在所有图标上收到 404 错误:/icons/icon-48x48.png?v=0a830f59a4abe247647ea123ff4fc96e'. It looks like our service worker can not resolve the URL of/icons`。当我们将图标目录移动到 gatsby 的静态目录时,一切正常。

我是否在 gatsby-config.js 文件中遗漏了什么?这是我们用于 gatsby-plugin-manifest.

的部分
resolve: `gatsby-plugin-manifest`,
  options: {
    name: "Keytoe",
    short_name: "Keytoe",
    start_url: "/",
    background_color: "#23e197",
    theme_color: "#23e197",
    // Enables "Add to Homescreen" prompt and disables browser UI (including back button)
    // see https://developers.google.com/web/fundamentals/web-app-manifest/#display
    display: "standalone",
    icon: "src/assets/logo/favicon.png", // This path is relative to the root of the site.
    // An optional attribute which provides support for CORS check.
    // If you do not provide a crossOrigin option, it will skip CORS for manifest.
    // Any invalid keyword or empty string defaults to `anonymous`
    crossOrigin: `use-credentials`,
  },
},

我遇到了同样的问题,幸运的是设法解决了。您 运行 Apache 作为您的网络服务器吗?因为这就是我的问题所在。

Apache 有自己的 /icons 目录,建议永远不要将此名称的目录放在您的 Web 项目的根目录中,因为 Apache 会 return 对位于其中的任何文件发出 404您的 /icons 目录。这是博客 post 导致的正确答案: https://electrictoolbox.com/apache-icons-directory/

因为我不想编辑任何服务器配置来解决问题,所以我选择从 common.js 复制 gatsby-plugin-manifest 的默认图标定义。 https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-plugin-manifest/src/common.js

并将所有 src: `icons/...` 替换为 src: `favicons/...`。现在我的 Apache 很开心,我也是。

这是我的 gatsby-config.js 的摘录:

      ...
     ,{
      resolve: `gatsby-plugin-manifest`,
      options: {
        name: `domain.com`,
        short_name: `domain.com`,
        start_url: `/`,
        background_color: `#ffffff`,
        theme_color: `#1abc9c`,
        display: `minimal-ui`,
        icon: `src/assets/favicon.png`,
        icons: [
          {
            src: `favicons/icon-48x48.png`,
            sizes: `48x48`,
            type: `image/png`,
          },
          {
            src: `favicons/icon-72x72.png`,
            sizes: `72x72`,
            type: `image/png`,
          },
          ...
        ]
       } ...